【发布时间】:2017-10-15 06:34:26
【问题描述】:
我有一个非常大的解决方案,由 50 多个项目(Windows 服务、网站、类库)组成,这些项目是使用服务和存储库框架以及 Telerik DataAccess ORM 构建的。在与 Telerik 的架构师进行了长时间的讨论后,他们提出了上述设计,因为它应该符合我们当时的需求并提供可测试的代码框架。几年后,现在我们的服务类已经增长到数千行,这使得它们更难维护和测试。
在阅读和研究我们代码中的一些问题后,我遇到了 CQS(命令查询分离),它在我们的项目中对我来说更有意义,因为它将我们庞大的服务类划分为更小的可测试类。我已经成功地实现了一个小的概念,但我现在想知道当我将 1000 多个查询移动到 CQS 命名空间时我的代码将如何组织(现在专注于查询,因为我想象的命令将被组织相同) - 显然把所有查询、处理程序和结果都在自己的文件夹中,每个文件夹将有 1000 多个文件,要找到一些东西会很痛苦。
到目前为止,我已经有了这个文件夹结构
Model
Customer
Queries
CustomerNameByIdQuery
CustomerNameByTextSearchQuery
QueryHandlers
CustomerNameByIdQueryHandler
CustomerNameByTextSearchQueryHandler
QueryResults
CustomerNameQueryResult
两个查询都返回相同的 CustomerNameQueryResult,它只有 Id 和 Value 属性
现在成像我还需要查询完整的客户记录,所以我需要CustomerByIdQuery、CustomerByIdQueryHandler 和来自Customer 模型的结果。目前还有大约 10 个针对客户的其他查询,具有不同的参数以满足不同的需求。
这种跨越数百个表的模式会产生大量查询类和处理程序,从而很难在代码中的特定位置找到我需要使用的内容(如果可能,促进代码重用)。
我正在向在大型生产应用程序中使用 CQS 的资深人士寻求有关项目中查询的命名空间/文件组织的建议,以及您的解决方案如何组织查询/处理程序/结果?例如,您是否将查询和处理程序放在同一个文件中?单独的文件是单独的目录?你如何处理同一个对象的多个查询?包含所有查询或多个文件的单个文件?您是否使用命名空间划分查询以便于编码?你知道你的结构有什么问题吗?
我知道这里没有单一的“正确”答案,但随着时间的推移一直在使用这种方法的人的一些建议将帮助我和其他人避免陷入您在文件/文件夹结构中已经遇到和解决的任何问题。
【问题讨论】:
标签: orm architecture