问题标签 [domain-model]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net-mvc - 最佳实践 - 将视图模型与域模型混合
将视图模型与域模型混合是否合理?
因此,即视图模型对象包含一些域模型对象(不是相反!)
dto - 在域模型中传递 DTO
我看到 DTO 类型在域模型的类型中创建并在类型之间传递。这是好习惯吗?
我一直认为 DTO 主要用于上下文边界(即对象图的边缘)以解耦上下文实现(例如在域/ui 边界)。
primary-key - 在我的域模型类中有无意义的键是不是很糟糕?
在创建领域模型时,我们的实体几乎总是有 Id 字段或属性,它代表数据库中相应表的主键列。我的问题是 - 如果我有这个与域模型无关的关键属性(换句话说,它只是数据库问题;Martin Fowler 更喜欢将其命名为无意义的密钥),持久层是否会泄漏到我的域中?如果是,我该如何预防?
dependency-injection - 将依赖注入到域模型中的技术
我有一个域模型类型。它的众多属性之一需要 ITranslationService 提供将其返回值翻译成适当语言的能力。
我是否应该将 ITranslationService 注入到域模型类型的构造函数中(因此必须在任何地方更改类型被实例化并且在通过 NhIbernate 检索时必须关注初始化),即使它被类型的一小部分使用(一个许多属性);还是我可以使用另一种功能模式?
有没有人有相关经验可以分享?
java - 解耦模型和输入检查
将输入检查与模型分离并在其他地方(例如由控制器)处理它是一种好习惯吗?如果是这样,从 MVC 或 DDD 的角度来看,如何做到这一点?
winforms - 在没有 InvokeRequired 的多线程场景中,Winforms 数据绑定到业务对象?
例如,我有一个业务对象Person
:
而且我有一些 Winforms UI 控件数据绑定到此类的对象:
现在我正在进行更改,somePerson
并且由于已经INotifyPropertyChanged
实施,这些更改会反映在 UI 中。到现在为止还挺好。
现在我的问题:如果我在工作线程中进行更改somePerson
(即不在 UI 线程中),例如因为我正在从数据库加载数据作为后台操作,这可能会导致异常,因为数据绑定尝试更新控件,仅允许在 UI 线程上发生。
这意味着我需要调用InvokeRequired
UI 元素来查看是否允许我更新业务对象——这似乎违反了应用程序的逻辑分层。
理想情况下,我希望能够修改我的业务对象,而不必关心它是否与 UI 数据绑定。这是否可以通过 Winforms 数据绑定实现?
nhibernate - 使用 NHibernate 进行域建模问题/集合
请考虑下面显示的域模型(为简洁而简化 - 没有 id 等)ACustomer
只能评论Product
一次。让我们假设(出于我不想进入这里的原因)Customer
该类不能拥有Review
它拥有的 s 集合。这Product
是这里的主要聚合根。
通常在这种情况下,在检索 时Product
,它只会在特定的上下文中Customer
。换句话说,我只会对Reviews
属于该特定集合的成员感兴趣Customer
。
那么,有没有办法在检索Product
对象时将集合的数量限制为与Customer
我提供的评论相关的评论?这将如何在 NHibernate 中实现?这是否完全符合 NHibernate 最佳实践(以及程度较低的 DDD)?
谢谢
c# - 如何建模对象以随时间跟踪设备/资产?
我一直在试图找出建模这个实体的最佳方法,但我陷入了困境。这是基本用例/故事:
我们有设备到达现场。在它到达之前,我们不会知道设备是什么。一旦设备到达现场,它必须被记录为已经到达以及它是空闲的还是活动的。如果它处于活动状态,用户必须记下设备执行的工作。当设备离开现场时,必须注意这一点。
应该可以很方便的查询到现场有没有设备,以前现场有什么设备等等。
我被困在日期方面。如果设备在特定日期没有被标记为空闲,我试图避免依赖 cron 作业来运行并将设备标记为空闲。感觉应该有办法做到这一点。这是我想出的:
我的想法是我可以运行一个查询Site.Equipment.Where(x=>x.Departure == null)
,例如查看哪些设备仍在现场。如果特定日期没有 EquipmentUtilization,则假定它是空闲的。然后我可以设置一个 DateTimeEnumerator:
构建从到达日期到 DateTime.Now 或 DepatureDate 的日期列表(如果不为空)。出于某种原因,这看起来很丑陋。我应该将 DateTime 枚举器放在 Equipment 对象中吗?感觉这应该全部放在一起或以某种不同的方式完成,尽管如果我运行它确实有效。建议?
domain-driven-design - 数据建模和领域建模有什么区别?
顺便说一句——关于数据建模,我指的是逻辑或概念数据模型——而不是物理模型。
这个问题是在工作中的一次讨论中提出的;我自然而然地跳到维基百科以获得一些基本定义 - 希望他们可以澄清差异 - 但他们没有......
概念模式或概念数据模型是概念及其关系的映射。
逻辑数据模型看起来非常相似(根据这个定义):
系统工程中的逻辑数据模型(LDM) 是组织数据的表示,按照实体和关系进行组织,并且独立于任何特定的数据管理技术。
然而...
问题解决和软件工程中的域模型或域对象模型 (DOM) 可以被认为是系统的概念模型,它描述了该系统中涉及的各种实体及其关系。
域模型与概念数据模型之间的差异似乎特别模糊。
增加这种混乱的一件事是(据我所见)域模型通常使用 UML 类图建模 - UML 类图中的类实体支持方法 - 我们的同事认为域模型必须不包含“操作”。我可以使用 UML 类图的子集来理解域建模者——但是假设人们在使用的工具支持时会避免包含“操作”不是很危险吗?
asp.net-mvc-2 - ASP.NET MVC 2:有什么方法可以将两个对象传递给一个模板?
此示例中的“查找”是IList<string>
州的缩写。通常,您的域模型 POCO 不会包含这些选项。ViewModels 通常负责引用原始域模型和查找对象,但是当域模型嵌套并且您使用 MVC 模板时会发生什么(它无法访问原始模型的根属性?
有没有办法将查找包含在一个对象中,并将模型包含在模板的不同对象中?是否允许在视图中即时组装特定于该模板的 ViewModel(必须包含来自那里的任何嵌套数据)?我认为下拉查找值的静态方法很糟糕。
有任何想法吗?
注释(据我所知):
来自存储库的域模型 POCO 的结构不会改变。例如,如果您需要一个模型来同时拥有 Customer 对象和美国州的 DDL 选项,您通常有一个 ViewModel 引用 Customer 对象和 Customer Lookup 列表。
但是,当您有一个嵌套的域模型(聚合根)时,嵌套对象没有放置查找列表的位置,并且 MVC 模板无法访问根级别的视图模型(它们的视图模型是部分模型)。
编辑:
有没有办法将 DDL 列表放在 ViewModel 的根级别,然后当您到达 Customer 对象时,构造一个引用根级别 DDL 列表和当前 Customer 对象的新 ViewModel 发送到模板?这将消除模型中的重复数据,并为所有视图使用单个模型。唯一不好的是您视图中的控制器之类的数据汇编代码(这同样糟糕)。