我需要一些使用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()方法,通过使用实体存储库并在单个事务中添加多个实体(帐户,所有者和...)。
现在我想知道我是否以正确的方式使用它们?还是我错过了一些积分?
答案 0 :(得分:0)
我一直都在使用这个,看看这篇文章尤其如何。网关上的部分。 SOA Design Pattern
答案 1 :(得分:0)
在SOA中,您永远无法完全确定您的调用链,因为您今天编写的服务将在明天以不同的方式进行编排。
我遵循这种启发式方法;在每个服务的边界上,如果传递给我并加入该交易,我将加入环境交易,如果没有环境交易,我将成为新交易的根。通过这种方式,我确信我需要做的任何工作都是事务,并将传递给我引入我的业务流程的其他组件。
请参阅此文章:Building Integrity into SOA