Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正确使用存储库/服务类_C#_Design Patterns_Service_Domain Driven Design_Repository - Fatal编程技术网

C# 正确使用存储库/服务类

C# 正确使用存储库/服务类,c#,design-patterns,service,domain-driven-design,repository,C#,Design Patterns,Service,Domain Driven Design,Repository,我正在开发一个重量相当轻的客户端应用程序(在.Net中的桌面应用程序,将来可能需要连接到其他应用程序),用于跟踪企业内的RMA,工程师将查看和更新应用程序中的状态,客户将在网站上创建/查看RMA 我想知道我对服务和存储库类的预期用途是否正确。web服务以JSON格式提供数据,我可以从中构造RMA对象。通过http://myRMA.com/repairs/2234/RMA.JSON 获取RMA的代码是否位于RMARepository类中,方法类似于GetRMA(int-RMAId),并且RMARe

我正在开发一个重量相当轻的客户端应用程序(在.Net中的桌面应用程序,将来可能需要连接到其他应用程序),用于跟踪企业内的RMA,工程师将查看和更新应用程序中的状态,客户将在网站上创建/查看RMA

我想知道我对服务和存储库类的预期用途是否正确。web服务以JSON格式提供数据,我可以从中构造
RMA
对象。通过
http://myRMA.com/repairs/2234/RMA.JSON

获取RMA的代码是否位于
RMARepository
类中,方法类似于
GetRMA(int-RMAId)
,并且
RMARepository
是否应遵循单例设计模式

然而,如果RMA被更新,即项目正在检查并等待报价接受,这是否在服务类中完成,该服务类调用RMA存储库以提交更新。
IsExists(int-RMAId)
是在这个服务类中还是在存储库中


我熟悉表示-应用程序(逻辑)-数据访问-数据(数据库)艺术结构,也熟悉MVP。但是我确实想知道
服务
类适合哪里。

存储库类仅用于访问和存储数据库中的信息。他们不应该有其他逻辑

服务用于从数据源(很可能是存储库)获取信息、处理信息并将结果返回给调用者

一个服务类可以使用多个存储库来实现所需的结果。在这一层中,您还可以有一个事件系统,它允许一个服务在另一个服务生成事件时执行操作

例如,UserService调用FeedService为每个新创建的用户创建一个新的RSS提要项


存储库层可以用诸如nhibernate之类的ORM表示。

实际上,我知道我需要实现什么,即使是如何实现,也需要知道在这种体系结构风格中放置功能的界限。表示层中希望显示RMA详细信息的控制器/演示者将调用一个服务类,该类将调用转发到一个或多个存储库以创建所需的服务,这是否公平对象也就是说,视图/控制器/模型从不触及存储库类。是。这是正确的做法。它使扩展应用程序和测试应用程序变得很容易。@jguffin,干杯,我将把它应用到我的设计中。你知道godo的阅读材料是什么定义了一个服务,也就是说,我应该在里面放多少内容。不知道。我的服务中通常有授权(CAS)、BO验证(ShureValidation/DataAnnotations)和日志记录(nLog)。当然还有构建/处理业务对象的逻辑。请记住,在服务中使用
Save(myBusinessObject)
方法可能会导致以后很难扩展应用程序。最好有像
incrematetax
AttachToGroup
等方法。一个
Save
方法有点太笼统了(在大多数情况下)@jgauffin如果我有一个做了大量工作的服务需要拆分成多个文件呢?我把这些文件放在哪里?假设我有project
MySolution.Services
。我应该为额外文件创建新项目并将
MyService.cs
放入
MySolution.Services
中,还是只在
MySolution.Services
中添加一个新文件夹?