- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
哪种方式更好: 1) 使用 第三方ORM 系统或 2) 手动编写 DAL 和 BLL 代码 使用数据库?
1) 在我们的一个项目中,我们决定使用 DevExpress XPO ORM 系统,我们遇到了许多浪费我们大量时间的小问题。 amd仍然时不时会遇到来自这个ORM的问题和异常,我们对这个“黑匣子”还没有完全的理解和控制。
2) 在另一个项目中,我们决定从头开始编写 DAL 和 BLL。虽然这意味着要多次编写枯燥的代码,但事实证明这种方法更加通用和灵活:我们可以完全控制数据在数据库中的保存方式、如何从数据库中获取数据等。而且所有的错误都可以以直接和简单的方式修复。
哪种做法一般是更好 ?也许问题仅在于我们使用的 ORM(DevExpress XPO),也许其他 ORM 更好(例如 NHibernate)?
是否值得使用 ADO 完整框架 ?
我发现 DotNetNuke CMS 使用自己的 DAL 和 BLL 代码。其他项目呢?
我想获取有关 的信息您的亲身经历 :您在项目中使用哪种方法,哪种方法更可取?
谢谢你。
最佳答案
我个人的经验是 ORM 通常完全是在浪费时间。
首先,考虑这背后的历史。早在 60 年代和 70 年代初,我们就拥有使用分层和网络模型的这些 DBMS。这些使用起来有点麻烦,因为在查询它们时,您必须处理所有检索机制:跟踪各处记录之间的链接,并处理链接不是您想要的链接的情况(例如,针对您的特定查询指向错误的方向)。因此 Codd 想到了关系 DBMS 的想法:指定事物之间的关系,在您的查询中只说您想要的内容,然后让 DBMS 处理找出检索它的机制。一旦我们有了几个很好的实现,数据库人员就喜出望外,每个人都转向它,世界很高兴。
直到面向对象的家伙进入商业世界。
OO 人员发现了这种阻抗不匹配:业务编程中使用的 DBMS 是关系型的,但 OO 人员在内部使用链接(引用)存储事物,并通过找出他们必须遵循和遵循哪些链接的详细信息来找到事物。是的:这本质上是分层或网络 DBMS 模型。因此,他们投入了大量(通常是巧妙的)努力将分层/网络模型分层回关系数据库,顺便丢掉了 RDBMS 给我们的许多优势。
我的建议是学习关系模型,围绕它设计你的系统(如果它合适的话)(经常是这样),并使用你的 RDBMS 的强大功能。您将避免阻抗不匹配,您通常会发现查询易于编写,并且您将避免性能问题(例如您的 ORM 层采用数百个查询来完成它应该做的事情)。
在处理查询结果时需要进行一定量的“映射”,但是如果您以正确的方式考虑,这很容易:结果关系的标题映射到一个类,并且关系中的每个元组都是一个对象。根据您需要什么进一步的逻辑,为此定义一个实际的类可能值得也可能不值得;只需处理从结果生成的哈希列表就足够容易了。只需浏览并处理列表,做你需要做的事情,你就完成了。
关于entity-framework - 手动 DAL & BLL 与 ORM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/904870/
我有一个分层解决方案如下: UI(用户界面) BLL(业务逻辑层) DAL(数据访问层) SharedEntities(仅包含实体 POCO 的 VS 项目) 我希望 BLL 有一个名为 GetPro
我想尝试一下 Heroku 和 Node.js。 Heroku 默认使用 Postgres,但我希望稍后可以选择使用 Amazon RDS (MySQL)。是否有一个好的数据库抽象层,最好有一个围绕它
主题行说明了一切。谷歌搜索 DAL 和 DAO 仅返回 C# .NET 相关结果。 Java 世界中是否存在 DAL/DAO 等效模式?有可用的引用实现吗? 最佳答案 当然它也适用于Java:Don'
使用 NHibernate(或任何其他 ORM)消除了 DAL 的必要性,我对吗? 或不? 最佳答案 您需要一个 DAL,问题是您在 DAL 中做什么。在使用 NHibernate 的 .NET 项目
我有一个跨多个应用程序复制的 DAL(我知道它的设计很糟糕,但现在忽略它),我想做的是这个...... 创建一个将通过所有桌面应用程序访问的 WCF DAL 组件。任何人都可以分享他们对关注的想法吗?
我的 DAL 包含通过 Oracle 的 UCP 连接到 Oracle 的 Spring Data Access。这意味着我主要使用 JdbcTemplate。我的服务器的要求是从数据库中断中恢复,更
我正在开发一个大规模性能关键的 asp web 应用程序,其中包含一个非常非规范化的数据库(出于性能原因,大量数据在表中重复)。该应用程序对性能至关重要且大型。几乎没有任何n层设计的感觉。我无法触摸数
基本上,DAL(数据访问层)应该提供简单的 CRUD(创建/读取/更新/删除)方法,但我总是倾向于创建更复杂的方法,以最大限度地减少来自业务逻辑层的数据库访问往返。 您如何看待以下对 CRUD 的扩展
public class Car { public int ID { get; set;} public string Name { get; set; } // ?? Do
如何为具有输出参数的存储过程创建通用的 DAL 层方法。 当存储过程有输出参数时,您将无法在数据集或数据读取器中检索结果作为集合。请告诉我最好的方法是使用通用方法来接受任何输入和输出参数并从输出参数返
在 MVP winforms 应用程序中,我在 DAL 中按如下方式处理异常。 由于用户消息传递不是 DAL 的责任,我想将它移到我的 Presentation 类中。 你能告诉我一个标准的方法吗?
我一直在研究和阅读大量关于在 PHP 中使用不同层来创建可维护和可读代码的内容。但是,我看到很多代码将实体和数据库访问放在一个类中。例如: class User{ public $id;
[编辑 1 - 添加了第三个指针语法(感谢 Alex)] 对于 DAL,您更喜欢哪种方法,为什么不: Car& DAL::loadCar(int id) {} bool DAL::loadCar(in
DAL(customerDAL)中的类不应该是单例的吗?由于我的 Controller (customerController) 公开“共享订阅”,因此在每次调用时,如果已存在,则无需创建新的 DAL
只是想收集关于 LINQ 应该(以及为什么)属于哪一层的不同想法和观点? 最佳答案 这取决于你想用 linq 做什么。使用 linq2sql 时,我推荐 DAL,但 Linq 不仅仅是数据库访问。您可
浏览有关 Zend Framework 中数据访问的几本教程和书籍,似乎大多数人在他们的模型(事件记录模式)甚至 Controller 中进行数据访问。我强烈不同意这一点。因此,我想要一个数据访问层(
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它. 3年前关闭。 Improve this
我正在尝试为我的 Web 应用程序创建数据访问层。目前,所有数据表都存储在 session 中。当我完成后,DAL 将填充并返回数据表。将返回的数据表存储在 session 中是个好主意吗?分布式/共
目前我面临的问题是,我尝试为我的 .NET 应用程序设计一个 DAL,该应用程序稍后将使用某种 NoSQL 数据库。 我现在评估的 NoSQL 数据库有时在用作主键的类型上有所不同。例如,MongoD
基于经典三层的项目:UI(在本题中不重要)、业务逻辑层和数据访问层。我有几个表:Customers Products Orders Users。设计应该是: //DAL methods public
我是一名优秀的程序员,十分优秀!