"import" 代码在 rails MVC 目录方案中的位置
Location for "import" code in the rails MVC scheme of directories
背景
我们根据 Rails 标准使用这些位置:
app/models
模型(包括 app/models/concerns
以避免 app/models/*.rb
文件变得太胖)
app/controllers
(包括关注点)精益控制器
app/views
照常
app/view_models
for "view models" (Ruby 特定于视图和模型之间关联的代码,但不能真正单独存在,因此不能真正放入模型中或视图)
lib
用于不调用 app
但从 app
调用的代码;对于我们的应用程序确实不是特定领域的东西。如果要在其他应用程序中重复使用,这些是提取到自己的 gem 中的潜在候选对象。
到目前为止一切顺利,我相信这很常见。
问题
有一种特定类型的代码我不太确定该放在哪里。这是与导入数据相关的代码。例如,这可能是处理某些 XML 并对模型执行几个不同操作的代码,但也可能是解析 Excel 文件或 class 的代码来自某些网络服务的数据)。让我们看看我们可以把它放在哪里:
app/models/concerns
- 这就是我们现在拥有的地方。但是该代码并不是真正代表模型;它代表状态变化 XML(在这个例子中)。它将与模型强烈互动,但它本身并不是模型;我们的一个强烈期望是 app/models
中的代码经常被其他 classes 使用(即被控制器,视图......),但我们现在谈论的那种代码并不是真的这样做。
app/controllers
- 执行任何实际文件处理的部分就在那里,这没问题。 XML 数据结构的处理不属于那里。
app/views
- 没有。
lib
- 不。本例中 XML 的处理非常 domain/app 具体。
问题
你把这样的代码放在哪里?你有 app/import
子树吗?它存在于模型中吗?
我喜欢你的体系结构和文件夹结构方法,所以无法超越你的 post :)
我认为,app 子文件夹绝对是保存此类 类 的正确位置。在我们的项目中,我们有 app/services、app/decorators、app/facades(作为我们从 Sandi Metz 获得的 view_models 的另一种实现)。
几周前我们遇到了完全相同的逻辑,因为您和我们决定将其存储在 app/parsers 中。在你的情况下,我会考虑 app/importers 或类似这样的事情。
所以我的总体意见是你的初步方向肯定是正确的。
背景
我们根据 Rails 标准使用这些位置:
app/models
模型(包括app/models/concerns
以避免app/models/*.rb
文件变得太胖)app/controllers
(包括关注点)精益控制器app/views
照常app/view_models
for "view models" (Ruby 特定于视图和模型之间关联的代码,但不能真正单独存在,因此不能真正放入模型中或视图)lib
用于不调用app
但从app
调用的代码;对于我们的应用程序确实不是特定领域的东西。如果要在其他应用程序中重复使用,这些是提取到自己的 gem 中的潜在候选对象。
到目前为止一切顺利,我相信这很常见。
问题
有一种特定类型的代码我不太确定该放在哪里。这是与导入数据相关的代码。例如,这可能是处理某些 XML 并对模型执行几个不同操作的代码,但也可能是解析 Excel 文件或 class 的代码来自某些网络服务的数据)。让我们看看我们可以把它放在哪里:
app/models/concerns
- 这就是我们现在拥有的地方。但是该代码并不是真正代表模型;它代表状态变化 XML(在这个例子中)。它将与模型强烈互动,但它本身并不是模型;我们的一个强烈期望是app/models
中的代码经常被其他 classes 使用(即被控制器,视图......),但我们现在谈论的那种代码并不是真的这样做。app/controllers
- 执行任何实际文件处理的部分就在那里,这没问题。 XML 数据结构的处理不属于那里。app/views
- 没有。lib
- 不。本例中 XML 的处理非常 domain/app 具体。
问题
你把这样的代码放在哪里?你有 app/import
子树吗?它存在于模型中吗?
我喜欢你的体系结构和文件夹结构方法,所以无法超越你的 post :)
我认为,app 子文件夹绝对是保存此类 类 的正确位置。在我们的项目中,我们有 app/services、app/decorators、app/facades(作为我们从 Sandi Metz 获得的 view_models 的另一种实现)。
几周前我们遇到了完全相同的逻辑,因为您和我们决定将其存储在 app/parsers 中。在你的情况下,我会考虑 app/importers 或类似这样的事情。
所以我的总体意见是你的初步方向肯定是正确的。