小编las*_*hou的帖子

无法将实际逻辑放入DDD域层

尽管已经研究Domain Driven Design了很长时间,但我仍然有一些基本要素.

似乎每一次我尝试设计了丰富的时候domain layer,我还需要大量的Domain Services或厚Application Layer的,我从"GetTotalAmount"等结束了,在他们没有真正的逻辑一堆近贫血域的实体,除了.关键问题是实体不了解外部因素,并且向实体注入任何内容都是不好的做法.

让我举几个例子:

1.用户注册服务.用户持久存储在数据库中,生成并保存文件(用户帐户需要),并发送确认电子邮件.

确认电子邮件的示例已在其他主题中进行了大量讨论,但没有得出真正的结论.有人建议把逻辑的application service是得到一个EmailServiceFileService注入从infrastructure layer.但那时我会在域外拥有业务逻辑,对吧?其他人建议创建一个domain service得到infrastructure services注入 - 但在这种情况下,我需要有(和)infrastructure services内部的接口看起来不太好(因为不能引用).其他人建议实施Udi Dahan的域事件,然后让EmailService和FileService订阅这些事件.但这似乎是一个非常松散的实现 - 如果服务失败会发生什么?请告诉我您认为正确的解决方案.domain layerIEmailServiceIFileServicedomain layerinfrastructure layer

2.从数字音乐商店购买歌曲.购物车已清空.购买持续存在.付款服务被呼叫.发送电子邮件确认.

好吧,这可能与第一个例子有关.这里的问题是,谁负责编排这笔交易?当然,我可以通过注入服务将所有内容放入MVC控制器中.但如果我想要真正的DDD,所有业务逻辑都应该在域中.但是哪个实体应该采用"购买"方法?Song.Purchase()Order.Purchase()OrderProcessor.Purchase()(域名服务)?ShoppingCartService.Purchase()(申请服务?)

在这种情况下,我认为在域实体中使用真实的业务逻辑非常困难.如果向实体注入任何东西不是好的做法,那么除了检查自己(及其聚合的)状态之外,他们怎么做其他事情呢?

我希望这些例子足够清楚,以显示我正在处理的问题.

domain-driven-design

19
推荐指数
2
解决办法
4386
查看次数

一个带有ASP.NET MVC3和嵌入式Razor视图的插件框架

我正在使用Razor视图为ASP.NET MVC3设计一个插件框架,我遇到了使嵌入式视图正常工作的问题.

插件框架旨在具有以下功能:

  • 每个插件都有自己的模型,控制器和视图.视图是嵌入式资源,控制器派生自PluginController类
  • 插件具有对定义PluginController基类的共享类库的依赖性引用
  • 承载插件的"shell"Web应用程序在设计时不得保留对任何插件的引用,因为它在设计时不知道它具有哪些插件.
  • 插件dll被删除在shell应用程序中的文件夹中,该文件夹不是/ bin文件夹
  • shell负责:
    1. 发现插件(使用反射)
    2. 注册所有控制器(我正在使用Spring.Net)
    3. 创建到控制器的路由
    4. 通过自定义VirtualPathProvider提供剃刀文件(cshtml)

现在一切正常,除非嵌入视图引用了插件dll中的类型.然后我得到臭名昭着的错误(名字遗漏):

The type or namespace name '[Plugins]' does not exist in the namespace '[MyPluginSolution]' (are you missing an assembly reference?)

原因是调用运行时来编译剃刀视图的csc编译器只从bin文件夹和GAC获取dll引用.

我也尝试使用这种技术预编译视图,但最后它给出了相同的结果,因为运行时坚持为预编译的剃刀视图编译包装器.

我当然可以将插件dll放在/ bin文件夹中,但我的问题是:

有没有办法在非bin(和非GAC)文件夹中注册dll,并将它们视为"一等公民",以便剃刀视图可以使用它们?

plugins razor asp.net-mvc-3

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

为什么getComputedStyle不能使用伪类,例如:hover?

window.getComputedStyle根据文档,该函数应该能够获得计算的伪类样式,如:hover .

它也被解释为另一个问题的答案

但正如最后一条评论在该问题中所说的那样,事实上它根本不起作用,它只返回正常的风格,而不是:悬停风格.你可以在这个jsfiddle中看到自己.警报返回红色,而不是绿色.

developer.mozilla.org上文档也有一个例子,但这也不起作用 - 见这里.

这个问题中,回答者在评论中指出它根本不起作用,但没有给出解释.

可能是在函数返回正确的值之前必须完全呈现样式表吗?我试过设置一些延迟,但似乎没有任何工作.

我尝试过最新的Firefox,Chrome和IE浏览器.有人知道为什么这个功能没有按预期工作吗?

javascript dom css-selectors

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

MSBuild项目具有不同的构建配置,而不使用sln

有关

我的VS解决方案中有两个项目,BookApp.Web并且BookApp.Domain.

BookApp.Web参考BookApp.Domain.

BookApp.Web具有以下生成配置:debug,staging,prod-eu,prod-usprod-as.我们有三个数据中心用于生产和临时环境.

BookApp.Domain到目前为止只有两个构建配置,debug.

从Visual Studio中构建解决方案时,我可以使用构建配置程序来确保无论为Web项目选择什么构建配置,调试配置始终用于Domain项目.

但是,在我的持续集成服务器上使用MSBuild构建时,事情就出错了.我在rollout.msbuild文件中使用它:

<MSBuild Projects="BookApp.Web\BookApp.Web.csproj" Properties="Configuration=Prod-us" />
Run Code Online (Sandbox Code Playgroud)

当我运行它时,MSBuild期望所有依赖项目具有相同的构建配置.由于情况并非如此(并且不应该是IMO),因此失败并显示以下错误消息:

The OutputPath property is not set for project 'BookApp.Domain.csproj'.  Please check to make sure that you have specified a valid combination of Configuration and Platform for this project.  Configuration='Prod-us'  Platform='AnyCPU'.
Run Code Online (Sandbox Code Playgroud)

相关问题的回答建议为每个构建配置创建单独的.sln解决方案,并使用MSBuild运行该解决方案.对我来说听起来不是一个好主意.

将所有构建配置复制到域项目也不理想.

有没有更好的方法告诉M​​SBuild使用不同的构建配置?

msbuild visual-studio

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