我有一个非常大的解决方案,由超过50个项目(Windows服务,网站,类库)组成,使用服务框架&存储库并使用Telerik DataAccess ORM构建。经过与Telerik的架构师进行了长时间的讨论后,他们提出了上述设计,因为它们应该符合我们当时的需求并提供可测试的代码框架。几年后,现在我们的服务类已经长到数千行,使得它们更难以维护和测试。CQS文件和命名空间组织
在阅读和研究我们的代码中的一些问题后,我遇到了CQS(命令查询分离),这在我们的项目中对我更有意义,因为它会将我们庞大的服务类划分为更小的可测试类。我已经成功地实现了这个概念的一个小教授,但我现在想知道如何将我的代码移动到CQS命名空间中时将我的代码组织起来(现在将注意力集中在我想象中的命令的组织方式上) - 显然会把所有查询,处理程序和结果每个都在自己的文件夹中,每个文件夹都会有1000个以上的文件,这对于找到一些东西是一个巨大的麻烦。
到目前为止,我有这个文件夹结构
Model
Customer
Queries
CustomerNameByIdQuery
CustomerNameByTextSearchQuery
QueryHandlers
CustomerNameByIdQueryHandler
CustomerNameByTextSearchQueryHandler
QueryResults
CustomerNameQueryResult
两个查询返回的只有编号和Value属性
现在成像我需要查询完整的客户记录相同CustomerNameQueryResult
也让我将需要CustomerByIdQuery
,CustomerByIdQueryHandler
和Customer
型号的结果。而目前还有大约10个针对不同需求的其他用户查询。
数百个表中的这种模式会使很多查询类和处理程序很难找到我需要在代码中的特定位置使用的内容(如果可能的话,促进代码重用)。
我正在寻找一些已经在大型生产应用程序中使用CQS的退伍军人的建议,这些应用程序涉及项目中查询的命名空间/文件的组织方式,以及您的解决方案是如何组织查询/处理程序/结果的?例如,你是否将查询&处理程序放在同一个文件中?单独的文件是不同的目录?你对同一个对象进行多个查询是做什么的?保存所有查询或多个文件的单个文件?您是否将查询与命名空间分开以便于编码?您是否有任何问题与您的结构有关?
我知道这里没有单个“正确”的答案,但是一些人一直建议使用这种方法的人会帮助我和其他人陷入你遇到的任何问题,并在文件/文件夹结构中解决。
让,感谢您的详细解答。你基本上是描述我目前的架构。与此相关的“问题”在于,由于服务包含连接到相同问题域的许多不同存储库,因此服务会变得非常长。这就是我试图用CQS简化(它应该将服务分成小块) –
@DaniAvni看到我的使用基类的编辑帮助了很多工作,以最大限度地减少服务和特殊存储库。某些服务很复杂,服务调用其他模型服务,我们尽量避免调用其他存储库。 – jean
Jean,我们也尽量不要从其他服务中调用服务,并且我们的大部分代码都在工作。仍然我的服务是巨大的。例如我的任务服务具有任务的CRUD方法,任务类型的CRUD,预约任务的方法以及许多其他方法,如果我没有记错的话,会产生巨大的文件3K +行。这是我试图与CQS分离的这些文件,因为我的服务中的每种方法都会转化为命令或查询,因此它应该将大文件分解成更小的可管理块 –