标签: application-layer

在哪个层中,Specification Pattern对象应该是"new'ed up"?

所以,我在这里查看了一些关于规范模式的帖子,但还没有找到答案.

我的问题是,在一个n层架构中,我应该在哪些规范中获得"新建"?

  1. 我可以将它们放在我的服务层(也就是说,应用层,它有时被称为......基本上,.aspx代码隐藏的东西会与之交谈),但我觉得通过这样做,我让业务规则漏掉了域名.如果以其他方式(除了服务层)访问域对象,则域对象无法强制执行自己的业务规则.

  2. 我可以通过构造函数注入将规范注入到我的Model类中.但同样,这感觉"错误".我觉得唯一应该注入Model类的是"服务",比如缓存,日志记录,脏标记跟踪等等......如果你能避免它,那么使用Aspects而不是乱丢模型的构造函数具有大量服务接口的类.

  3. 我可以通过方法注入(有时称为"Double Dispatch")注入规范,并明确地使用该方法封装注入的规范以强制执行其业务规则.

  4. 创建一个"域服务"类,它将通过构造函数注入获取规范,然后让服务层使用域服务来协调Domain对象.这对我来说似乎没问题,因为规范强制执行的规则仍然在"域"中,而Domain Service类的命名方式与它正在协调的Domain对象非常相似.这里的事情是我觉得我正在编写大量的类和代码,只是为了"正确"实现规范模式.

除此之外,相关规范要求存储库以确定它是否"满意".

这可能会导致性能问题,尤其是 如果我使用构造函数注入b/c消耗代码可以调用一个可能包装规范的属性,并且反过来调用数据库.

所以任何想法/想法/链接到文章?

新产品和使用规格的最佳位置在哪里?

domain-driven-design specification-pattern n-layer application-layer

7
推荐指数
2
解决办法
2793
查看次数

ping如何解析ip地址?

Ping实用程序在网络层上方工作,DNS在Application层中工作.

如果我们尝试ping www.google.com

它是如何解析GOOGLE的IP地址的,因为DNS在这些层之上?

dns ping network-protocols tcp-ip application-layer

6
推荐指数
1
解决办法
4965
查看次数

在哪里放置业务逻辑,AppLayer o DataLayer?

在阅读这篇文章(业务逻辑数据库或应用程序层)之后,我仍然没有足够的理由来对抗"数据库中的业务逻辑"主题.

在我目前的工作中,有很多db事务(实际上)和所有那些糟糕的代码很难维护,存储过程中有很多重复,所以如果你想在表中稍微改一个值,你会需要找到所有这些程序并将其更改为您想要的程序.如果你需要改变一点桌面设计,也会发生同样的情况.

所有当前的开发人员都非常了解SQL,但他们仍然不是任何DATABASE的专家作为引擎(8个开发者).

目前,我们计划将整个核心迁移到新版本(包括数据库设计).我需要一些例子:

  • 为什么数据库中的业务逻辑有时候是邪恶的
  • 数据库中的业务逻辑是一个好的做法多少钱
  • 为什么应用层中的业务逻辑对于企业应用程序更好.

应用程序语言:Java
数据库:Oracle11g
该应用程序将具有服务,作为HTTP页面和Web服务.

java oracle business-logic application-layer

5
推荐指数
1
解决办法
2617
查看次数

应用层单元测试在DDD中的外观如何?

在我的工作中,我们正在编写由应用程序调用的Web服务.我们正在使用域驱动设计进行敏捷思维设置.与在DDD中一样,我们有域和应用层.但是,我们在为这些层编写单元测试时遇到了问题,因为我们似乎正在测试域逻辑两次:在域单元测试中和在应用程序单元测试中:

申请单元测试

    [TestMethod]
    public void UserApplicationService_SignOut_ForExistingUserWithBalance_ShouldClearBalanceAndSignOut()
    {
        //Arrange
        long merchantId = 1;
        long userId = 1;

        var transactionId = "001";
        var id = "122";            
        var user = Help.SetId<User>(User.Register(id, new DateTime(2015, 01, 01, 00, 00, 01)), userId);

        _usersDb.Add(user);
        var userBonusBalanceRepository = _testContext.MoqUnitOfWork.MockUnitOfWork.Object.GetUserBonusAccountRepository();

        UserBonusAccount uba = userBonusBalanceRepository.GetForUser(user);
        uba.PayTo(
            new Domain.Core.Money { TotalAmount = 10, BonusAmount = 0 },
            new Domain.Core.Outlet
            {
                BonusPercentage = 50,
                IsLoyalty = true,
                Id = id,
                OutletId = "111"
            },
            transactionId,
            DateTime.Now);
        userBonusBalanceRepository.Update(uba);          

        //Act
        _testContext.UserApplicationService.SignOut(id);

        //Assert
        var firstOrDefault …
Run Code Online (Sandbox Code Playgroud)

c# tdd unit-testing domain-driven-design application-layer

4
推荐指数
1
解决办法
2010
查看次数

在哪个层中控制器适合分层架构/ DDD

所以,我在这里看到了一些关于它的问题,但没有一个是关于它的具体问题,也没有回答我的疑问.

在分层架构/ DDD应用程序中,控制器(常见MVC应用程序中的"C")在哪个层中适合?我在不同的地方读过它可能在UI层或应用程序层中,但我仍然无法绕过正确的层.

我正在阅读埃里克埃文斯的DDD,直到我达到这本书的那一点我还想不通.我注意到他说如果UI层不复杂,你可以将它与应用层合并.这会对控制器产生相同的影响吗?

domain-driven-design controller presentation-layer n-tier-architecture application-layer

4
推荐指数
1
解决办法
731
查看次数

DDD:程序应用服务的OOP替代方案是什么?

我最近得到了Scott Miller和Nick Tune的一本关于领域驱动设计的模式,原理和实践.它在C#中有一些很好的例子,所以与我之前读过的其他DDD书籍有点不同.由于C#支持委托和事件,Domain事件实现非常简洁.

但是,有一件事让我担心,正如本书在应用服务一章中所说的那样,它应该是"程序式的,薄的".我知道应用程序层应该很薄,但为什么程序化?我不想写程序代码,或者我不会首先选择DDD.我还发现这个stackoverflow文章还标签Application Services是程序代码:

https://softwareengineering.stackexchange.com/questions/279369/conceptual-mismatch-between-ddd-application-services-and-rest-api

所以你看?应用程序服务是程序式的,而不是OOP.这让我想知道是否可以通过OO接口替换应用程序服务的过程接口来将设计改进为更多OO.本文建议方法对象可以,并且它有效吗?有哪些OO替代程序应用程序服务?谁能详细说明?

http://ayende.com/blog/2145/entities-services-and-what-goes-between-them

c# oop domain-driven-design service-layer application-layer

2
推荐指数
1
解决办法
580
查看次数

应用服务是否应该注入域服务

我正在使用具有以下层的Entity Framework 6在WinForms应用程序上工作:

  • 介绍
  • 应用
  • 基础设施

当用户从UI单击"保存"按钮时,它将调用"应用程序"层中的应用程序服务并传入请求.然后,应用程序服务使用该请求调用域服务.域服务调用域模型中的多个实体,以对请求中使用的数据执行验证.

域模型中的一个或多个验证需要来自存储库的信息,以确定从表示层接收的请求中的数据是否符合某些业务规则.

我正在考虑两个方案来解决这个问题.

  1. 让应用程序服务从存储库中检索所需的信息以进行验证,并将这些值传递给域服务,域服务将调用域模型和实体来验证传入的规则和值请求.然后,当域服务完成其验证时,让Application Service保存请求,这将导致将控制权返回给同步等待验证完成的应用程序服务.如果我这样做,那么域层将没有对存储库的直接或间接(注入)引用.如果我这样做,域服务的单元测试会更容易,因为没有注入任何内容来执行验证.它所需要的一切都已经传入.缺点是一些业务知识被放入应用服务,因为现在它需要知道要检索哪个存储库信息以验证请求.

  2. 在调用域服务以验证请求时,请将Application Service的实例注入其中.然后,域服务可以使用注入的应用程序服务从存储库获取信息,其服务合同在域层中定义.一旦所有信息都可用,它将根据需要传递给各个实体以验证规则和值.验证完成后,域服务使用注入的应用程序服务保存请求.域服务完成并退出后,它会将保存操作的状态返回给已等待验证完成的应用程序服务.然后,外部等待应用程序服务可以将保存结果返回给UI.我在这里遇到的一个问题是,在对域服务进行单元测试时,我将不得不模拟注入的应用服务.

哪个选项或其他行动方案可以更好地解决?提前致谢.

domain-driven-design entity-framework dependency-injection application-layer business-layer

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

在退出或不退出时清理

我知道清理是件好事.我也理解操作系统内部,所以如果我知道我的进程正在终止,那么它的内存将被释放.但我想提出不同的观点.我觉得在退出时释放内存是相当不错的想法.

例如,我可能已经分配了当前换出的大内存,如果我在退出时释放它,则需要将其带到RAM,然后释放它.如果我不这样做,退出时只需在一张桌子上标记为免费.

总的来说,操作系统已经发生了很大的变化(基础知识保持不变),我理解这个问题可以被认为是A_VERY_PLATFORM_DEPENDENT,但是从今天的应用程序开发人员的角度来看,他要么陷入某些框架,要么被困在某个框架中,或者是daredevil编码器,正在研究原始技术作为COM,非常依赖,我会称之为VERY_CONTROLLED_ENVIRONMENT.

对于TL;DR:在现代操作系统上,我认为我不应该在退出时执行清理.如果你认为我错了,为什么?

PS:我不是在谈论RTOS,我的意思是受控环境意味着Windows,Linux和我从未意味着设备驱动程序开发或操作系统开发.

c++ operating-system resource-cleanup application-layer

0
推荐指数
1
解决办法
872
查看次数