固相行政区
这是预阿尔法阶段,将来可以改变。
这开始是一个有趣的项目,用于内部目的,以制作更可靠的 Solidus_backend 管理面板版本。 Solidus 有一个很棒的核心组件和一个包含电池的管理界面,但在我们看来,由于我们的定制,管理 gem 缺乏作为与 Solidus_core 结构通信的真正侧面基础设施的设计结构。
特征
- 美观且易于使用(用户体验很重要)
- Hotwire 涡轮动力⚡️
- 使用导入贴图产生小火花的刺激
- Ransack 让过滤变得简单
- 批量操作如销毁
为什么要重写轮子?
正如我们所说,在我们看来,solidus_backend 继承了许多被困在库中的警告,选择回到狂欢分支(Deface 我看着你!),而这个结构对于这些选择来说太严格了:
- 许多带有 ransack 的过滤器都因自定义参数摘要而变得混乱
- Cancan 与“宏”(:manage、:admin)一起使用,而不是与真正的 CRUD 路由一起使用,并且不遵守 MVC 模式的约定。
- 产品、订单和促销编辑依赖于 ajax 骨干,而不是更传统的 CRUD 行为。
- 不是“真正”的 Turbo 兼容:Turbolinks 是在 hotwire 中发展起来的,当前的用法只是 JavaScript 正确脚本执行的一个片段。
- 大量使用 Rails-ujs 的 JavaScript 远程执行和“remote: true”,而不是使用 Turbo 进行更干净且可预测的 html 响应。我认为远程不是一个好方法,因为它在浏览器控制台中注入 JavaScript 代码以希望被执行,对我来说,这是跨脚本潜在的安全威胁。
正如您所看到的,solidus_admin 已经相当旧了,而对于使用 Solidus_starter_frontend 进行的 Solidus_frontend 改造,是时候进行大量的实验和更新了!
您是否正在尝试创建新的solidus_backend gem?
有点像,但没有。我首先将其作为一个替代项目,因为它是一个 alpha 项目,它的目标是提供一个包含电池的后端,与 Rails 框架的低耦合,而且还提供一个结构合理的 Adminland 框架,用于可扩展性和无需 headdacle 的 UI 定制。我想让它更加依赖于宿主项目所有者选择的库,作为一种简单的集成,而不需要太严格。
好吧,那么你的选择是什么?你的也有意见吗?
我认为我们可以考虑让 adminland 代码结构尊重以下基本原则:
- 通过较少的覆盖/猴子补丁方法轻松覆盖和扩展。我们是人不是猴子!
- 之前因毁容而被禁止。我从来不喜欢破坏方法,我认为最好从一开始就将 UI 视为模块化,通过复制而不是通过修补和注入来替代覆盖视图。对于另一个 sidecar 工具(所有带有管理部分的 Solidus 扩展)的可扩展性,我更喜欢制作一个更清晰和公开的前置点。
- 严格遵守 CRUD 路线。 Everthing 必须尽可能严格地依赖 CRUD 路由,对于嵌套路由方法也是如此,以支持约定优于配置的方法。
- 使用生成器脚手架模板从托管 Rails 应用程序添加外部资源。
考虑到这一点,我开始为“新”solidus_adminland 项目做出一些选择,例如:
- 默认情况下使用 hotwire 并鼓励使用 js 以外的 DOM 操作方法。
- 刺激简单可靠的添加,例如选择器、输入掩码和表单验证
- 使用 view_component gem 将辅助方法与 HTML 结果封装在一起(例如 link_to 或更复杂的方法)。也更容易实现覆盖目的,替代可靠性的部分和 UI 逻辑的 PORO 类
- 每次资产导入都是使用rails-importmap进行的,以实现“无以javascript为中心的应用程序方法”
- 使用管理 gem 来划分代表(带有 *Dashboard 类)和用于显示或提交数据的 CRUD 路由之间的关注点
- 每个表单都由 FormBuilder 设计样式,其中每个字段都使用单独的 Component 类呈现。如果在功能中我们或某人想要放置一些奇怪的字段,例如 Dropdown JS 字段,可以使用新的 Admininstrate::Field、FormBuilder::Component 和 js Sparkle 刺激来制作?
- 对于政策方式,我认为我们可以采取一种混合方法来与康康舞兼容,但采用更简单的普迪特方法。在我们的例子中,我们使用 action_policy gem。它依赖于 PORO 对象,我们可以在其中为每个操作定义执行的规则。它是控制器的真正中间部分,用于控制“记录范围”、“记录允许的参数”和“记录可访问路由”的策略。
正如您所看到的,对于每个资源都有:
- 用于标准 CRUD 操作的同名控制器
- 具有相同名称的索引、new_form、edit_form 和要显示的显示参数的仪表板
- 我可以访问的当前用户的范围策略、我可以提交的参数以及允许该资源使用的路由。
...作为一种“传统”方法,您可以创建自己的(或扩展)这三个方法,并按照您的喜好(或您的应用程序要求)放置业务逻辑!
初始设计是使用 Bootstrap 5 和 Tabler 进行的,但您可以轻松地覆盖管理/应用程序中 CRUD 的标准视图。观看次数将保持严格到尽可能低的水平
路线图
所有徽标和颜色的权利均来自 Solidus Presskit 管理主题的灵感来自 Solidus 网站模型并基于 Bootstrap 5 版本的 Tabler