问题标签 [domain-data-modelling]

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.

0 投票
0 回答
57 浏览

ruby-on-rails-4 - 直接关联和“通过”关联的 Rails 关联

我正在尝试了解 Rails 中以下类型场景的最佳关联策略:

  • 所有者有许多样本(这些样本可以是个人的,也可以是样本集的成员)。
  • 一个所有者有许多样本集。
  • 一个样本集有很多样本。

因此,如何最好地设置我的模型,以便我可以直接向所有者添加样本,或者通过将样本添加到样本集中然后将样本集添加到所有者?我不认为我想在这里使用“has_many through”,因为样本并不总是样本集的一部分。我想要一个包含 owner.samplesets.samples 和 owner.samples 的调用。

有没有人对我应该为此调查的多种类型的协会中的哪一种有建议,或者我是否需要任何帮助?

问候格里

0 投票
3 回答
18607 浏览

grails - Grails 域类:hasOne, hasMany 没有 belongsTo

我是 Grails 的新手。我可以使用“hasOne”或“hasMany”而不使用“belongsTo”到另一个域类吗?

提前致谢。

0 投票
1 回答
61 浏览

sql - 代理键作为维度的属性

在数据建模中,一个维度是否可以接受另一个维度的代理键作为属性,还是应该始终是业务键?

我有一个项目维度,它有一个部门编号作为属性。我也有一个部门维度。Item Dimension 是否可以将 SK 保存到 Department Dimension 或仅保留业务 key?

0 投票
2 回答
41 浏览

oop - 当具体类型表示只能有一个的不同选择时,使用接口/继承作为标记

一个满嘴的问题,但它是我一直在努力解决的 OO 原则。假设我有一个电子商务应用程序并且有支付方式的概念,例如信用卡、Paypal、Apple pay 等。用户可以选择选择哪种支付方式,所以我需要将它们全部显示在一个列表中在屏幕上,根据选择的不同,这将用于驱动 UI,呈现不同的文本/图像/交互,并且将通过稍微不同的方式序列化为在线支付请求。

这是一些代码:

因此,在我的预订类中,我可以有一个由接口引用的通用支付对象,但我无法在没有强制转换的情况下访问底层类型,这很糟糕,因为实际上它们在域方面不共享任何公共属性。或者,我有多个属性以不同的方式感觉不好。用户只能选择一种付款方式,因此其他付款方式必须为空或某种空对象,我必须查询枚举或询问每种付款方式是否为空。此外,我的付款方式选择屏幕有点麻烦,因为我不能只迭代一个泛型类型,我必须明确建立列表。

从理论上讲,我可以向 PaymentMethod 接口添加一些方法,例如 Serialise() 或所有支付方法共有的一些 UI 表示方法,但是我必须在我不想做的模型对象中实现它们在我的模型层。

总的来说,我在典型的面向对象语言中没有一个干净的解决方案。我用 c# 编写了这个,但这可以适用于任何 OO 语言。

0 投票
0 回答
112 浏览

entity-framework - 使用自定义字段结构从现有数据库映射实体框架

我正在使用带有代码优先方法的实体框架 6。我们使用一个商业的、现成的软件解决方案,我将其整合到我们自己的自定义应用程序中。除了EmployeeSalaryJobDetail的基本表之外,这是可能的:

它在数据库中也有一个自定义字段配置,如下所示:

自定义字段表:

自定义字段数据表:

您将如何将这些自定义字段映射到域实体?例如,我希望能够编写:

0 投票
1 回答
98 浏览

domain-driven-design - Domain modelling: Doing it right

Having seen Jimmy Bogard's excellent video on crafting wicked domains, I tried to apply the same principles to one of my existing projects to evaluate how well i have grasped the concept. I have my queries and doubts listed below.

Domain Background: Admin can view a list of companies. He then approves a company. The database is supposed to update a Boolean field to true and store the id of the user who approved the company.

Initially, I had the following code written in my service layer. It passes the request to the repository which updates the appropriate fields in db and then sends a mail notification.

Re factoring to create rich domains and encapsulate logic within the domain class, I created the below.

Queries:

  1. Is what I have done completely correct/partially correct?
  2. From a performance viewpoint is fetching the two objects just to create the proper class instances going to be a problem in the future?
  3. Does the mail notification belong to the service layer?
  4. How would my company repository look like to handle the property related to the user who approves the company? Should my company repository have a reference to the user repository (i think that is wrong).

Alternatively, I could write the service layer as below, but I don't think that is correct either.

0 投票
2 回答
765 浏览

domain-driven-design - DDD - 使用在整个系统中必须唯一的联系信息建模用户

我需要一些关于为身份和访问域建模用户的说明。用户域模型有一个联系信息实体(实体因为它是可变的),客户可以用电话号码注册,但可以在需要时选择更改。

客户曾经使用过的电话号码永远不会被任何其他用户使用。因此,我认为该模型必须允许查询电话号码表(因为它与客户是多对一的,因为旧号码已停用并存档)。

如果可以创建域服务,那么存储库应该是什么,因为没有识别出聚合。在这些情况下,我有一个客户(用户)聚合,但是为了允许查询所有用户以查看客户提供的电话号码是否已被其他人使用,聚合应该是什么,或者我可以编写一个 DomainService只是可以直接查询数据库到 phonenumber 表来检查唯一性,我这样做是否违反了任何 DDD 原则,有什么更清洁的选择。

0 投票
1 回答
38 浏览

ruby-on-rails - 对作为组的记录集合进行建模

我正在为 Ruby-Like(Rails 4/5)中的具体或抽象方法寻找方向,以模拟以下需求或用户故事:

给定一个模型,我们称它为PurchaseOrder并具有以下属性:

  • 生产量
  • amount_taken_from_stock
  • 安置日期
  • 邮寄日期
  • product_id
  • client_id

作为用户,我希望能够看到这些PurchaseOrder的表格列表,并在必要时对它们进行分组

详细信息:当对PurchaseOrder的集合进行分组时,该分组集合的行为应该与PurchaseOrder完全相同,因为它必须在表中显示为记录,过滤操作应该像对单个 PurchaseOrder 所做的那样对分组记录起作用实例,分页和排序也是如此。此外,该必须缓存或者至少我是这样认为的,amount_to_produceamount_taken_from_stock的总和,所有放置日期中的最小placement_date以及最后但并非最不重要的,它们中的最小delivery_date的总和。

我在想像这样在PurchaseOrder中隐式地建模:

这样就可以轻松实现在表视图中显示的目的,过滤分页和排序将开箱即用,只需使用 group_id nil 限定记录范围,就可以将分组记录排除在表之外。

但是我预见到了直接的缺点:

  1. 更新组成员属性时,例如amount_to_produce,父缓存的amount_to_produce也应该更新,其他三个属性相同。这可能会导致模型回调 before_update,除非它涉及单个实例本身的行为,否则我倾向于不使用它。
  2. 取消分组成员时,相同的历史记录
  3. 销毁组成员时也是如此(它可以并且将会发生)。

对于1.我们可以暗示不需要在父PurchaseOrder中缓存金额或日期属性,因为我们可以覆盖这些属性的 getter 并在purchase_orders.size.nonzero 时返回子项的总和/分钟?,但是,这闻起来有点不对劲。

所以总结一下,如果不是最好的,我想要一种乐观的方法来模拟这种情况,以及关于将成员分组和取消分组到组/从组中的方法,关于实现它的最佳域位置的想法,我在想像 Groupable 这样的问题。

pd:对于每个组,该组的client_id将是一个默认的种子客户端,称为“多个客户”,而product_id与孩子的product_id相同,因为限制只能对具有相同product_id的PurchaseOrder进行分组,不能对具有不同product_id 的组进行分组。

谢谢。

0 投票
1 回答
36 浏览

c# - 领域类建模冲突

我有一个 UserProfile 类

以及相关的 Blog 类

我很难弄清楚如何使用 Blog 类对 UserProfile(AuthoredBlogs 和 SubscribedBlogs)中的两个集合进行建模。在 UserProfile 中拥有这两个集合需要两个 FK 关联到博客,但我只是不明白这可以/应该如何工作。

UserProfile 可以订阅和创作许多博客。但是 Blog 类只能有一个作者和订阅的 UserProfiles 列表,或者像我在这里拥有的那样,是订阅者的 UserProfileId 列表。

我无法让它工作,由于 FK 关联问题,代码优先更新无法部署到数据库。

任何帮助表示赞赏。

0 投票
0 回答
21 浏览

domain-data-modelling - 试图避免事实与事实的关系

我试图避免事实与事实的关系,但在这种情况下似乎很难:

对于几个客户 (DIM_Customer),我们会收到电子邮件 (FACT_email)、电话 (FACT_CALL) 等。现在电子邮件和电话可能有调查。每个调查对于客户来说都是独一无二的。众所周知,一项调查由几个问题组成。

所以我们有 DIM_Survey(基本上是调查类型)和 Dim_Questions 和 Fact_Survey(包含答案)。

我的问题是如何获得电子邮件与该特定调查的调查答案之间的关系。