Jea*_*amp 8 repository service-layer
我正在开发一个分层的ASP.Net MVC 3 Web应用程序(EF 4.1):模型,存储库,服务,控制器,某些情况下的ViewModel和视图.
现在我的问题是最好的做法之一.需要访问另一个实体的实体服务类是否应使用其服务或其存储库.例如,假设实体A的服务方法需要在创建A时更新实体B. A的服务类应该使用B的存储库还是服务层?两者都有可能,但最佳做法是什么?就个人而言,我更喜欢一项服务来访问另一项服务.这样,它可以作为访问更多进化方法的说法.
我更喜欢在服务类之间调用,因为您可能还需要来自另一个服务的一些业务逻辑。但要小心避免循环依赖。我建议您使用依赖注入,这将帮助您避免可能的循环依赖。还要考虑为您的服务类创建接口并从您的客户端类使用这个接口(将具体实现传递给构造函数)。
然后您的 SericesA 将如下所示:
class ServiceA : IServiceA
{
public ResultA Method1() { //some logic };
public void Method2() { //some logic };
}
Run Code Online (Sandbox Code Playgroud)
ServiceB 依赖于 ServcieA。
class ServiceB: IServiceB
{
private IServiceA _serviceA;
public ServiceB(IServiceA serviceA)
{
_serviceA = serviceA;
}
public ResultB Method()
{
var result = _serviceA.Method1();
// get result from service A and create and return result for service B
}
}
Run Code Online (Sandbox Code Playgroud)
我倾向于依靠常用的原则和实践来做出此类决策;DRY(不要重复自己)和 KISS(保持简单,愚蠢)在这里可能适用。
除非您需要由于绕过实体 B 的服务类而重复某些逻辑,否则我会直接从实体 A 的服务类调用实体 B 的存储库。
这是一个小细节,但这意味着少涉及一个类(ServiceClassA > RepositoryClassB 而不是 ServiceClassA > ServiceClassB > RepositoryClassB),这使得它在我看来是一个更简单的解决方案。
华泰