IRepository<>和SOA在一起

时间:2011-01-27 15:54:19

标签: design-patterns soa

我需要一些使用IRepository<>的帮助模式和SOA一起。

我正在开发一个包含非常复杂的业务逻辑的会计应用程序。目前我正在使用IRepository作为DAL,只执行基本的CRUD +提供IQueryable接口,一些缓存功能等等。

在它之上,我有一个BusinessLogic层,它扮演Service或Facade层的角色(它们是同一个东西吗?)。所有应用程序逻辑都封装在这里作为将由Presentation层使用的方法。

正如我所说的所有基本CRUD都放在存储库中,但是在BusinessLogic中进一步发生,例如我们可能只在我们的帐户存储库中有这些基本方法:

public class AccountRepository
{
    public IList<Accounts> GetAll()
    {
        ...
    }

    public Accounts Get(int id)
    {
        ...
    }

    public IList<Accounts Where(Func<Accounts,bool> criteria)
    {
        ...
    }

    public Accounts Add(Accounts item)
    {
        ...
    }
}

但要获得具有特定号码的帐户,我们会提供如下服务:

public class AccountService
{
    AccountRepository repos;

    public Accounts FindByNumber(int AccountNumber)
    {
        return repos.Where(o=>o.AccountNumber == AccountNumber).FirstOrDefault();
    }
}

AccountService还可以使用CreateAccount()方法,通过使用实体存储库并在单个事务中添加多个实体(帐户,所有者和...)。

现在我想知道我是否以正确的方式使用它们?还是我错过了一些积分?

2 个答案:

答案 0 :(得分:0)

我一直都在使用这个,看看这篇文章尤其如何。网关上的部分。 SOA Design Pattern

答案 1 :(得分:0)

@ sos00问道“你做了什么来管理交易?我的意思是你在哪一层处理它们?(我想到引擎层),你如何在这个架构中实现它们”

在SOA中,您永远无法完全确定您的调用链,因为您今天编写的服务将在明天以不同的方式进行编排。

我遵循这种启发式方法;在每个服务的边界上,如果传递给我并加入该交易,我将加入环境交易,如果没有环境交易,我将成为新交易的根。通过这种方式,我确信我需要做的任何工作都是事务,并将传递给我引入我的业务流程的其他组件。

请参阅此文章:Building Integrity into SOA