Language agnostic 是手动分配一个实体';这是个好主意吗?

Language agnostic 是手动分配一个实体';这是个好主意吗?,language-agnostic,identity,modeling,Language Agnostic,Identity,Modeling,我们正在开发一个系统来替换客户的旧应用程序 实际上,有许多实体(如商家、推销员、产品等)必须具有手动分配的ID,以便可以与其他现有系统集成。i、 e.会计 我们认为最好的解决方案是简单地允许用户在创建实体时手动分配实体ID;我们将向他推荐下一个可用的ID,用户可以根据自己的需要进行更改。不允许更新!(哈哈哈) 我们很高兴听到你对这件事的想法。赞成/反对 提前感谢:) PD:你知道有关的文档吗-实体和ID- 更新 我们认为应该有这样的情况,而不是这样。所以 此外,在某些情况下,客户实际上希望给

我们正在开发一个系统来替换客户的旧应用程序

实际上,有许多实体(如商家、推销员、产品等)必须具有手动分配的ID,以便可以与其他现有系统集成。i、 e.会计

我们认为最好的解决方案是简单地允许用户在创建实体时手动分配实体ID;我们将向他推荐下一个可用的ID,用户可以根据自己的需要进行更改。不允许更新!(哈哈哈)

我们很高兴听到你对这件事的想法。赞成/反对

提前感谢:)

PD:你知道有关的文档吗-实体和ID-


更新

  • 我们认为应该有这样的情况,而不是这样。所以
  • 此外,在某些情况下,客户实际上希望给定的实体具有他们带来的Id。我认为是组织内部代码

永远不要让用户有权分配或创建底层对象标识符。这些必须由系统维护

想象一下,如果用户选择了一个已经在使用的id,那么试图找出一个相关实体实际与哪个实体关联的噩梦

相反,您应该有一个常规的实体ID,该ID是系统分配的某种类型(int、guid等),并用于指向所有依赖对象的链接。然后拥有某种类型的“外部”id,用户可以将自己的标识符放入其中


也许这在某种程度上与外部系统有关,也许不是。关键是,无论它们做什么,您都能够保持自己的一致性。

通常要做的是指定您自己的、通常是隐藏的、内部使用的标识符。然后创建第二个标识符,用户可以将其用作单独的数据字段。此外,如果您尝试建议下一个ID,您可能会遇到一些并发问题。

我想这可以归结为关注点分离问题。如果您已经开发应用程序一年多了,您应该已经知道为什么您的rdb中需要对象标识符,如果您的用户需要关注分配和/或管理您的底层对象标识符,那么您就有设计问题,这个问题是,您将数据访问/存储问题与业务逻辑混为一谈。正如其他人已经说过的,最好的方法是有两个标识符,一个对用户透明并在应用程序内部使用,另一个用于集成过程


我在与零售商合作时也看到过类似的情况,有一个id和一个产品的SKU,SKU本身可能是一个id,以便我们都有一个好的设计。

在什么情况下这更可取?嗨,克里斯,我知道你的意思。一开始,我们考虑在实体中有两个不同的ID:系统ID和用户分配的ID。但我们认为这会使系统过于复杂,在用户ID字段上添加验证逻辑(应该是唯一的,等等…),并在与两个实体相关的所有查询中添加一个额外的连接,以获得相关的实体用户ID。你觉得怎么样+1+1在创建与另一个系统接口的externalID时,如何告诉他们不能使用哪些ID?你不能。ExternalId不是唯一的,尽管每个实体都是唯一的。使用单独的externalID是我们的做法。@Marcus:感谢您的经验+1贪婪,永远不要让您的用户担心这样的任务。而SDReyes,您指出的“复杂性”是不必要的。@SDReyes-可能整数键的最大错误是它诱使开发人员向用户显示密钥。要正确执行,您需要按照Chris提到的那样执行,并且有两个值:一个用于用户,一个用于系统。最好的例子是发票。您有一个用户从未见过的发票的系统生成密钥,以及一个完全独立的密钥,该密钥具有用户在发票上盖章的单独规则。嗨,Bobby,是的!并发性的东西应该被考虑在内+1谢谢:)哎呀,我不知道为什么我正好有3票落选?有人可能会猜测,根据线程的共识,解决方案是非常正确的,因此它背后肯定还有其他东西。无论如何,我希望它能帮助你找到更好的解决方案。