标签: service-layer

存储库和服务层之间的区别?

在OOP设计模式中,存储库模式和服务层之间有什么区别?

我正在开发一个ASP.NET MVC 3应用程序,我正在尝试理解这些设计模式,但我的大脑却没有得到它......

oop asp.net-mvc repository-pattern service-layer

181
推荐指数
5
解决办法
8万
查看次数

胖模型/瘦控制器与服务层

我使用.Net开发了多年的企业应用程序我的应用程序通常有一个包含映射到SQL DB表的实体的域模型.我使用Repository模式,依赖注入和服务层.

最近我们开始研究MVC 3项目,我们讨论了在哪里放置哪些逻辑.我来自瘦控制器/ FAT模型架构,并想知道服务层如何适应

选项1 - 模型与服务的对话

控制器很薄,调用模型上的方法.模型"知道"如何从数据库加载自己并与存储库或服务进行通信.例如,customerModel有一个Load(id)方法,并加载客户和一些子对象,如GetContracts().

选项2 - 控制器与服务对话

Controller要求服务检索模型对象.加载/存储等逻辑在服务层中.该模型是仅具有数据的纯实体模型.

为什么选项1会成为更好的选择,特别是当我们谈论企业应用时,我的经验告诉我要分离问题,让模型和控制器尽可能地薄,并且有专门的服务来做业务逻辑(imcl.数据库交互)

感谢所有建议和对优质资源的参考.

architecture model-view-controller asp.net-mvc service-layer asp.net-mvc-3

78
推荐指数
2
解决办法
2万
查看次数

服务层应该返回MVC应用程序的视图模型吗?

假设您有一个ASP.NET MVC项目并且正在使用服务层,例如在asp.net站点上的这个联系管理器教程中:http: //www.asp.net/mvc/tutorials/iteration-4-make-的应用程序,松散耦合-CS

如果您有视图的视图模型,那么服务层是否适合提供每个视图模型?例如,在服务层代码示例中有一种方法

    public IEnumerable<Contact> ListContacts()
    {
        return _repository.ListContacts();
    }
Run Code Online (Sandbox Code Playgroud)

如果你想要一个IEnumerable,它应该进入服务层,还是在其他地方是"正确"的地方?

也许更合适的是,如果您为与ContactController关联的每个视图都有一个单独的视图模型,那么ContactManagerService是否应该有一个单独的方法来返回每个视图模型?如果服务层不是正确的位置,那么viewmodel对象应该在哪里被初始化以供控制器使用?

asp.net-mvc service-layer asp.net-mvc-viewmodel

61
推荐指数
5
解决办法
2万
查看次数

Doctrine2存储库是保存实体的好地方吗?

当我阅读有关存储库的文档时,通常使用实体和集合,但是以"只读"的方式.

从来没有存储库具有类似insertUser(User $user)或的方法的示例updateUser(User $user).

但是,在使用SOA时,Service不应该使用Entity Manager(这是对的,不是吗?)所以:

  1. 我的服务应该知道全局EntityManager吗?
  2. 我的服务应该只知道使用过的存储库(比方说,UserRepository和ArticleRepository)

从这两个问题,另一个问题,我的服务应该明确persist()flush()我的实体吗?

soa design-patterns service-layer symfony doctrine-orm

53
推荐指数
2
解决办法
2万
查看次数

架构Web应用程序中的服务层与业务层?

我知道这可能听起来很愚蠢,但我发现很难理解服务层的需求及其与业务层的差​​异.

因此,我们使用asp.net mvc 2并拥有数据访问层,它对数据库进行所有查询,然后我们拥有业务层,其中包含需要完成的业务逻辑和验证.最后我们有Presentation Layer,基本上有所有的视图.此外,我们还在不同的文件夹中有一些帮助程序,DTO和viewmodel类作为我们库的一部分.但我试图阅读有关架构的内容,似乎服务层是架构的重要组成部分.

我所理解的是服务层是调用所有功能的东西.但我真的不能在我们的应用程序中看到Service层的需要吗?或者它可能已经存在并且我看不到它......任何人都可以用一个例子解释一个服务层是如何重要的?它与业务层有什么不同,因为从我读过的内容看起来非常相似?如果它在第一个需要的话?我们所要做的就是以最佳方式构建我们的应用程序您对它的想法和经验是什么?

architecture business-logic-layer service-layer asp.net-mvc-2

52
推荐指数
5
解决办法
2万
查看次数

何时需要或方便地将Spring或EJB3或它们全部一起使用?

混淆使用JSF2 + Spring + EJB3或它们的任意组合让我感到有些困惑.我知道Spring的一个主要特性是依赖注入,但是我可以使用JSF托管bean @ManagedBean@ManagedPropertyanotations,并获得依赖注入功能.使用EJB3,我更加困惑何时将其与JSF一起使用,或者甚至有理由使用它.

那么,在什么样的情况下使用Spring + JSF2或EJB3 + JSF2是个好主意?

到目前为止,我只使用JSF2创建了一些小型Web应用程序,从不需要使用Spring或EJB3.但是,我在许多地方看到人们正在将所有这些东西放在一起.

jsf spring ejb java-ee service-layer

39
推荐指数
2
解决办法
9689
查看次数

域模型与服务层中的ASP.NET MVC业务逻辑

我一直在阅读有关将业务逻辑放在ASP.NET MVC项目中的位置,我仍然无法弄清楚某些事情.

1 - 领域模型.这些真的是什么?在我的Model文件夹中,我只有一堆与我的数据库对应的类.我先使用EF代码.我认为这些是我的域模型.

2 - 服务层.这个答案暗示了一个服务层,我觉得这很有道理.我决定和这个一起去.然而,Martin Fowler的"贫血领域模型"文章搞砸了我的想法.

我不确定如何为我的域模型添加逻辑.

我经历了许多与业务逻辑相关的问题,每个问题都提出了1或2.我不明白的是我如何实现第一个问题.向实体类添加方法(对我来说是域模型)根本没有意义.为什么第二种方法被认为是坏的?

asp.net-mvc business-logic domain-model service-layer anemic-domain-model

35
推荐指数
3
解决办法
2万
查看次数

将服务层与验证层分开

我目前有一个服务层,它基于ASP.NET站点中的服务层验证一文.

根据这个答案,这是一个糟糕的方法,因为服务逻辑与违反单一责任原则的验证逻辑混合在一起.

我真的很喜欢提供的替代方案,但在重新分解我的代码时,我遇到了一个我无法解决的问题.

请考虑以下服务接口:

interface IPurchaseOrderService
{
    void CreatePurchaseOrder(string partNumber, string supplierName);
}
Run Code Online (Sandbox Code Playgroud)

基于链接答案的以下具体实现:

public class PurchaseOrderService : IPurchaseOrderService
{
    public void CreatePurchaseOrder(string partNumber, string supplierName)
    {
        var po = new PurchaseOrder
        {
            Part = PartsRepository.FirstOrDefault(p => p.Number == partNumber),
            Supplier = SupplierRepository.FirstOrDefault(p => p.Name == supplierName),
            // Other properties omitted for brevity...
        };

        validationProvider.Validate(po);
        purchaseOrderRepository.Add(po);
        unitOfWork.Savechanges();
    }
}
Run Code Online (Sandbox Code Playgroud)

PurchaseOrder传递给验证器的对象还需要两个其他实体,Part并且Supplier(假设此示例中PO只有一个部分).

如果用户提供的详细信息与数据库中需要验证程序抛出异常的实体不对应,则PartSupplier对象都可以为null.

我遇到的问题是,在此阶段验证器丢失了上下文信息(部件号和供应商名称),因此无法向用户报告准确的错误.我可以提供的最佳错误是"采购订单必须具有关联部件",这对用户没有意义,因为他们确实提供了部件号(它在数据库中不存在).

使用ASP.NET文章中的服务类,我正在做这样的事情:

public void …
Run Code Online (Sandbox Code Playgroud)

c# service-layer asp.net-mvc-3

32
推荐指数
1
解决办法
9436
查看次数

为什么要使用服务层?

我查看了http://solitarygeek.com/java/developing-a-simple-java-application-with-spring/comment-page-1#comment-1639上的示例

我试图找出他提供的示例中首先需要服务层的原因.如果你把它拿出来,那么在你的客户端,你可以这样做:

UserDao userDao = new UserDaoImpl();
Iterator users = userDao.getUsers();
while (…) {
…
}
Run Code Online (Sandbox Code Playgroud)

看起来服务层只是DAO的包装器.有人可以给我一个案例,如果服务层被删除,事情会变得混乱吗?我只是没有看到开始使用服务层的重点.

spring service-layer

31
推荐指数
3
解决办法
3万
查看次数

如何使用@EJB,@ PersistenceContext,@ Inject,@ Autowired注入@FacesValidator

我怎么可以注入的依赖一样@EJB,@PersistenceContext,@Inject,@AutoWired,等的@FacesValidator?在我的具体情况下,我需要通过以下方式注入Spring托管bean @AutoWired:

@FacesValidator("emailExistValidator")
public class EmailExistValidator implements Validator {

    @Autowired
    private UserDao userDao;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

然而,它没有被注射,它仍然存在null,导致java.lang.NullPointerException.看来@EJB,@PersistenceContext并且@Inject也不起作用.

如何在验证器中注入服务依赖项以便我可以访问数据库?

validation spring dependency-injection service-layer jsf-2

31
推荐指数
1
解决办法
1万
查看次数