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
Design patterns IRepository<&燃气轮机;和SOA一起_Design Patterns_Soa - Fatal编程技术网

Design patterns IRepository<&燃气轮机;和SOA一起

Design patterns IRepository<&燃气轮机;和SOA一起,design-patterns,soa,Design Patterns,Soa,我需要一些关于同时使用IRepository模式和SOA的帮助 我正在开发一个会计应用程序,其中包括非常复杂的业务逻辑。目前,我将IRepository用作DAL,它只提供基本的CRUD+功能,如提供IQueryable接口、一些缓存功能等 除此之外,我还有一个BusinessLogic层,它扮演着服务层或门面层的角色(它们是一样的吗?)。这里封装的所有应用程序逻辑都是表示层将使用的方法 正如我所说,所有基本CRUD都放在存储库中,但在BusinessLogic中更进一步,例如,我们的帐户存储库

我需要一些关于同时使用IRepository模式和SOA的帮助

我正在开发一个会计应用程序,其中包括非常复杂的业务逻辑。目前,我将IRepository用作DAL,它只提供基本的CRUD+功能,如提供IQueryable接口、一些缓存功能等

除此之外,我还有一个BusinessLogic层,它扮演着服务层或门面层的角色(它们是一样的吗?)。这里封装的所有应用程序逻辑都是表示层将使用的方法

正如我所说,所有基本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)
    {
        ...
    }
}
AccountService还可以有一个CreateAccount()方法,通过使用entities repository在单个事务中添加多个实体(一个帐户、所有者和…)

现在我想知道我是否以正确的方式使用它们?还是我遗漏了一些要点

@sos00问“您在管理事务方面做什么?我的意思是在哪一层处理它们?(我想到引擎层)以及如何在这个架构中实现它们”

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

我遵循这个启发;在每个服务的边界上,如果环境事务被传递给我并登记到该事务中,我将加入该事务,如果没有环境事务存在,我将成为新事务的根。通过这种方式,我确信我需要做的任何工作都是事务,并将传递给我拉入编排的其他组件


请参阅本文:

我一直在使用这篇文章,请看看这篇文章,特别是关于网关的部分。非常感谢,您是如何管理事务的?我是说你在哪一层处理它们?(我想到引擎层)您如何在这个架构师中实现它们?
public class AccountService
{
    AccountRepository repos;

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