- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在参与一个项目,在该项目中我们托管一个 WCF 服务以供某些客户端访问。 WCF 解决方案分为 4 个不同的 C# 项目:
Host.csproj
DataContracts.csproj
Infrastructure.csproj
Model.csproj
加入这个项目后,我立即想知道为什么有一个单独的“DataContract”对象项目和一个“Model”对象项目。这两个项目基本上包含相同对象的重复项。例如,在 DataContract 项目中,有一个具有 4 个属性的 Customer 对象,模型项目也有一个具有相同四个属性的 Customer 对象...我注意到在应用程序代码将数据接触对象映射到模型对象,然后在流经我们典型的服务存储库模式时将模型对象重新映射回数据契约对象。在该服务中产生结果所需的映射数量变得非常烦人。
在询问了一些队友为什么选择这条路线后,我被告知数据契约不应包含域逻辑,并且它们是严格用于通过线路发送的对象(并且所有域逻辑都应该使用模型来完成)对象的版本)。
我觉得这种做法有点没有必要。难道我们不能取消数据契约项目,并将我们的模型对象用于服务端的域逻辑以及数据契约吗?
谁来教教我...
最佳答案
Couldn't we just do away with the datacontracts project and use our model objects for both domain logic on the service side and also as datacontracts?
是的,您实际上可以将域对象公开到您的服务之外,并且它可能会为您节省一两个映射。
但是,让我们想象一下, future 领域模型会根据业务需求而发生变化。
现有消费者对他们的契约(Contract)感到满意,并且不希望每次发布时都进行更改,因此您仅限于一个小的 non-breaking您可以进行的可能更改的子集,或者您必须等到它们准备好发布后才能进行。
有一天,另一位企业消费者出现,他想要利用您的域功能。但他们不想要与现有消费者相同的契约(Contract)。您如何才能在不破坏现有消费者的情况下为他们提供他们想要的东西?
另一个开发团队想要在进程中使用您的域模型,因此您向他们提供了一个程序集,但他们的部署服务器是 .net 2.0,因此尝试加载 System.Runtime.Serialization.dll 失败了
更一般地说,当您与外部依赖者紧密相连时,如何发展您的领域能力?
如果您认为这些情况都不适合您,并且您的服务将永远是存储库上的一个简单外观,用于某些古老且不变的业务功能,那么就去做吧。
或者,
您觉得烦人的映射可以保护您免受不可避免的变化的影响。作为服务的使用者,与该服务的发布计划耦合是一场噩梦,而且这两种方式都是如此。这些映射使您能够按照自己的意愿发展域的业务能力,而不必担心破坏任何内容。想要重命名字段吗?做吧。厌倦了那种庞大的单一类(class)?将其重构为子类型。世界是你的牡蛎。
如果您担心效率或性能,进程内类型映射比进程外服务调用快几个数量级,几乎可以忽略不计。
所以我不得不说出你的同事给你的建议:
datacontracts should not contain domain logic and that they are strictly objects to be used to send over the wire
对我来说听起来很聪明。更多 here .
如果您发现映射很乏味,我使用了 Omu ValueInjector之前,它省去了很多麻烦。
关于wcf - 将 DataContract 对象与 WCF 服务中的 "Domain"对象分开是一种好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23812388/
我像那样遍历数组。 NSArray *array = [[currentRaum raumattribute] allObjects]; NSString *compositeString =
我想找到所有引用这种模式的子字符串:一些字符+一些字符+第一个字符。现在我在 Python 2.7 中有了这个: T = "i was here" m = re.findall(r"([a-z])[a
我想使用与 tidyr 分开将一列字符串(例如 [1, 58, 10] )分成几列。我的问题是有时列较短(永远不会更长)。我在同一个数据框中有很多列有这个问题。 加载包 require(tidyr)
我正在开发一个具有图形用户界面的网络测试工具。我现在面临的问题是,我无法将基础数据与 GUI 类分开。该应用程序由一个 QMainWindow 组成,它随后生成多个其他 QDialogs 并具有一些
我经常听到“策略与机制分离”的口头禅,尤其是在 Unix 哲学的背景下。这是什么意思,有哪些具体的例子?什么时候/为什么是/不是一件好事? 最佳答案 它基本上是将需求或业务功能与技术实现分离。机制是技
我正在使用 writeToFile:atomically: 方法将一些加密数据写入文本文件。问题是,需要保存的文件必须是用户加密的文件,并带有我选择的扩展名。这是我到目前为止所拥有的: [encryp
我有这串 abcdef x y z 或这个 "ab cd ef" x y z 我正试图将其解析为 s1 = "abcdef" arr = ["x","y","z"] 或者 s1 = "ab cd e
这个问题已经有答案了: One big javascript file or multiple smaller files? [duplicate] (7 个回答) 已关闭 6 年前。 我有 4 种类
我有这样的事情 - function DetailCtrl($scope) { $scope.persons = [{ id: 1, name: "Mark"
在操作(复制/移动)包含合并单元格的范围时,我总是收到错误消息“您的粘贴与合并单元格重叠。请取消合并单元格,然后重试”。但是,当尝试使用 Range#breakApart 取消合并范围内的单元格时,我
我有一个包含一些 TextFields 的 TableView。所述 TextFields 的值链接到二维数组(NSMutableArrays 的 NSArray)中的某些位置。 一个初始的干净数组定
我定义了一个标签,其中一半需要在左侧,另一半文本需要在右侧。我怎样才能解决这个问题,让另一半拉对? 我添加了 margin-right 以使文本向右拉,但它与其他 div 不一致。
我正在尝试创建一个正则表达式来将 JavaScript 中的每个单词与 .(点)分开。 function myFunction() { var url = "in.k1.k2.k3.k4.com"
如何使用 CSS 将网站的正文/内容区域与背景分开。为了向您展示我的意思,请看附图。因此,两侧的背景将扩展到拥有超大显示器的人,但内容将始终保持相同大小。 谢谢,阿马尔 http://i.imgur.
有可能用 CSS 将两个背景图像对 Angular 分开吗? 我知道如何只用一张图片制作它,但我不能用两张图片制作它。 这是一个例子: |-------------| | /|
这是一个JSFiddle我创建了展示代码的外观。我将如何给予这些 它们之间是否存在间隙,没有一个元素低于另一个元素? .main-content { width: 50%; float: le
我正在处理具有这样数据的项目(我使用带有 python 的 pandas 框架): days rain 0 1 2 0 3 1 1
我正在尝试编写一个宏来获取信息并将该信息发送到另一个函数,方法是将原始 va_list 拆分为字符串,然后从原始 va_list 生成另一个 va_list。 下面是我的代码。 调用宏 /* Usag
我需要来自 SharedToDomains 和 SharedFromDomains 的键和值数据。我想打印这些值。 var LogResponse = DeserializeFromJson(sLog
我现在正在使用 Alamofire 来发出发布请求。我首先在 ViewController 中构建它并开始工作。但后来我试图通过在另一个 class 中构建它来分离它。我使用 singleton 并且
我是一名优秀的程序员,十分优秀!