问题标签 [entities]

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 投票
41 回答
15299 浏览

sql - 为什么我们需要实体对象?

我真的需要看到一些关于当前接受的企业应用程序设计范式优点的诚实、深思熟虑的辩论。

我不相信实体对象应该存在。

我所说的实体对象是指我们倾向于为我们的应用程序构建的典型事物,例如“Person”、“Account”、“Order”等。

我目前的设计理念是这样的:

  • 所有数据库访问都必须通过存储过程完成。
  • 每当您需要数据时,调用存储过程并遍历 SqlDataReader 或 DataTable 中的行

(注意:我还使用 Java EE 构建了企业应用程序,Java 人员请用等价物代替我的 .NET 示例)

我不反对OO。我为不同的目的编写了很多类,而不是实体。我承认我写的大部分类都是静态辅助类。

我不是在制造玩具。我说的是跨多台机器部署的大型、大容量事务应用程序。Web 应用程序、Windows 服务、Web 服务、b2b 交互,应有尽有。

我用过 OR 映射器。我已经写了几篇了。我使用了 Java EE 堆栈、CSLA 和其他一些等价物。我不仅使用过它们,而且还在生产环境中积极开发和维护这些应用程序。

我得出了久经考验的结论,实体对象正在阻碍我们,我们的生活将如此得多。

考虑这个简单的例子:你接到一个关于你的应用程序中某个页面不能正常工作的支持电话,也许其中一个字段没有像它应该的那样被持久化。使用我的模型,分配来查找问题的开发人员恰好打开了 3 个文件。一个 ASPX、一个 ASPX.CS 和一个带有存储过程的 SQL 文件。该问题可能是存储过程调用中缺少参数,需要几分钟才能解决。但是对于任何实体模型,您总是会启动调试器,开始单步执行代码,最终您可能会在 Visual Studio 中打开 15-20 个文件。当你走到栈底时,你已经忘记了从哪里开始。我们一次只能在脑海中保留这么多东西。软件非常复杂,无需添加任何不必要的层。

开发复杂性和故障排除只是我抱怨的一方面。

现在让我们谈谈可扩展性。

开发人员是否意识到,每次编写或修改与数据库交互的任何代码时,他们都需要彻底分析对数据库的确切影响?不仅仅是开发副本,我的意思是模拟生产,所以您可以看到您现在为您的对象需要的附加列刚刚使当前查询计划无效,并且在 1 秒内运行的报告现在需要 2 分钟,只是因为您在选择列表中添加了一列?事实证明,您现在需要的索引太大以至于 DBA 将不得不修改文件的物理布局?

如果你让人们通过抽象离物理数据存储太远,他们将对需要扩展的应用程序造成严重破坏。

我不是狂热者。如果我错了,我可以确信,也许我错了,因为对 Linq to Sql、ADO.NET EF、Hibernate、Java EE 等的推动力如此之大。请仔细考虑你的回答,如果我遗漏了什么我真的很想知道它是什么,以及为什么我应该改变我的想法。

[编辑]

看起来这个问题突然又活跃起来了,所以现在我们有了新的评论功能,我已经直接评论了几个答案。感谢您的回复,我认为这是一个健康的讨论。

我可能应该更清楚我在谈论企业应用程序。我真的无法评论,比如说,在某人的桌面上运行的游戏或移动应用程序。

为了回应几个类似的答案,我必须把一件事放在首位:正交性和关注点分离经常被引用为使用实体/ORM 的理由。对我来说,存储过程是我能想到的关注点分离的最好例子。如果您不允许通过存储过程以外的所有其他方式访问数据库,那么理论上您可以重新设计整个数据模型并且不会破坏任何代码,只要您维护存储过程的输入和输出即可。它们是合同编程的完美示例(只要您避免“选择 *”并记录结果集)。

问一个在这个行业工作了很长时间并使用过长期应用程序的人:在数据库存在的情况下,有多少应用程序和 UI 层来了又去?当有 4 或 5 个不同的持久层生成 SQL 以获取数据时,调整和重构数据库有多难?你什么都改变不了!ORM 或任何生成 SQL 的代码都将您的数据库锁定在石头上

0 投票
10 回答
70783 浏览

python - 在 Python 中将 XML/HTML 实体转换为 Unicode 字符串

我正在做一些网页抓取,网站经常使用 HTML 实体来表示非 ascii 字符。Python 是否有一个实用程序可以接收带有 HTML 实体的字符串并返回 unicode 类型?

例如:

我回来了:

代表一个带声调的“ǎ”。在二进制中,这表示为 16 位 01ce。我想将 html 实体转换为值 u'\u01ce'

0 投票
5 回答
8536 浏览

java - 你有 Hibernate 实体的通用基类吗?

你有 Hibernate 实体的通用基类,即具有 id、版本和其他通用属性的 MappedSuperclass 吗?有什么缺点吗?

例子:

0 投票
3 回答
4287 浏览

html - DOCTYPE RSS & HTML 实体

我的 RSS 提要下有一个“ldquo”“rdquo”和其他几个实体。好像如果我添加

xml标记下方和rss标记上方,我将能够包含这些实体。我添加了,但它似乎不起作用。有谁知道我错过了什么?谢谢

0 投票
9 回答
17962 浏览

xml - XML 中的特殊字符

我正在使用 xml 和 xsl 创建一个左侧导航系统。一切都很顺利,直到我尝试在我的 xml 文档中使用一个特殊字符。我正在使用»,我得到了错误。

原因:对未定义实体“raquo”的引用。
错误代码:-1072898046

我该如何进行这项工作?

0 投票
3 回答
727 浏览

c# - LINQ to Entities 是否重用对象的实例?

使用 LINQ to Entities 听起来是一种很好的方式来查询数据库并获取我可以修改的实际 CLR 对象、数据绑定等等。但是,如果我第二次执行相同的查询,我会返回对相同 CLR 对象或全新集合的引用吗?

我不希望多个查询生成越来越多的相同实际数据的副本。这里的问题是我可以更改一个实体的内容并将其保存回数据库,但该实体的另一个实例仍然存在于其他地方并保存旧数据。

0 投票
1 回答
437 浏览

asp.net - 实体框架:使用 FK(为什么它们会被隐藏?)

首先,让我们定义几个表:

用户表将存储有关用户的信息:

UserTasks 是一个存储与用户关联的任务的表:

当我使用 ADO 实体框架生成 UserTasks 表时,我将得到一个如下所示的类:

UserTasks
- taskName(字符串)
- 用户(用户对象的集合)

注意:在 UserTasks 表中没有生成用户 ID。所以现在让我们假设我需要插入一个新的用户任务......我该怎么做?我无权访问 userID FK 字段,所以我唯一的选择是查找并填充用户对象,然后将其传递给我的任务对象,如下所示:

上面的问题是我正在做一个额外的和不必要的数据库调用来填充我的用户对象。有没有办法以某种方式创建到我的 userID 字段的新映射并仍然保留 User 对象?

谢谢

——瑞安

0 投票
4 回答
437 浏览

entity-framework - 您能否使用 .NET 3.5 SP1 进行开发并仅在 .NET 3.5 下运行

我是否可以开发一个使用 .NET Framework 3.5 SP1 中的 ADO .NET 实体的网站,然后将其部署在仅具有 .NET 3.5 框架的另一台机器上?

0 投票
7 回答
10211 浏览

internet-explorer - IE 中的 HTML 实体和字符集

我在✓使用 iso-8859-1 作为字符集的 html 文档中显示 html 实体(复选标记:✓)。

在 Firefox 中,它显示为复选标记。在 IE 中,它显示为一个方框。切换到 UTF-8 似乎没有什么不同。

有没有一种可靠的方法可以在不使用图像的情况下在 IE 6 和 7 中显示这些实体?

0 投票
3 回答
3023 浏览

domain-driven-design - 在 DDD 中,值​​对象的实际优势是什么?

到目前为止,我已经了解实体对象有一个 ID,而值对象没有,但在最常见的示例中,您有一个附有地址值对象的人员实体。创建单独的地址对象而不是仅将地址属性保留在 Person 实体中的最大优势是什么?