【问题标题】:Are there any frameworks/libraries for Delphi that come close to the functionality offered by Bold/Eco?Delphi 是否有任何框架/库接近 Bold/Eco 提供的功能?
【发布时间】:2011-03-24 21:10:37
【问题描述】:

不确定在 Borland/Codegear/Embarcadero 过渡期间 Bold/Eco 发生了什么,但我肯定会在较新版本的 Delphi 中怀念它。有人知道接近的框架吗?

如果没有,也许您可​​以建议将库和组件组合在一起。

【问题讨论】:

  • 我认为你的标签是错误的。您应该将“elphi”更改为“delphi”
  • 可悲的是,即使是现在,多年后,我也不认为有什么比这更接近了。 (恕我直言)
  • 顺便说一句,ECO 还是 CapableObjects 开发的,目前是第 6 版
  • @dmauric.mp 但不适用于 Delphi。

标签: delphi domain-driven-design object-persistence bold-delphi


【解决方案1】:

hcOPF 似乎是 Delphi win32 唯一真正的 ORM,但它还没有接近。

对于 UML 建模等 Delphi win32(或 C#),我推荐Model Maker

这两个工具都支持 Delphi 2010。

--杰罗恩

【讨论】:

  • BOLD 的死是不幸的,它被放弃了,我相信是因为 ECO 取代了它,而当 Delphi.net 死时,ECO 也死了。不过,当您使用 Delphi Prism 时,也许 ECO 可能会成为一种可能的未来技术。
  • 实际上,ECO 并没有消亡:它是为 C#、Delphi.NET 和 Delphi Prism 开发的。所以你仍然可以使用它,但只能在 .NET 项目中使用。 (capableobjects.com/apps/InstantForum414/Topic4219-4-1.aspx)
  • 要实现领域驱动设计,您需要的不仅仅是 ORM。它是一种 SOA/客户端-服务器设计,而不仅仅是一种建模数据和持久性的方式。
  • 不要在荷兰人身上尝试 SOA。那里意味着 STD (;
【解决方案2】:

替代品是list of OPFs for Delphi win32(每个都有简短描述)。

我只在 Delphi 中使用过 Bold(现在仍然使用),但我认为在功能集中没有任何替代方案可以接近。我认为这是关键,哪些功能对您很重要? 如果您不需要 Bold 提供的所有东西,也许您可​​以选择其中一种替代方案。

或者,你仍然可以使用 Bold,最新版本是Bold for Delphi 2006,并希望 Embarcadero 最终开源它,或者继续开发。 使用 Bold 做某事的用户压力一直存在,但 Embarcadero 似乎可以很好地处理压力。

【讨论】:

  • Embarcadero 论坛上表示,不幸的是,出于许可原因,Bold 可能永远作为开源发布(它包含一些不属于 Embarcadero 的第三方积木)。但是一些 Bold 用户wrote a petition.
【解决方案3】:

开始编辑/更新:

自从发布此答案以来,该框架得到了很大的增强,特别是提供了实现真正领域驱动设计所需的所有功能:

  • ORM(即使是 Delphi Starter 版本)的数据库不可知论(不仅是 SQLite3,还有任何数据库,包括 MS SQL 或 Oracle);
  • 基于Interface的服务,similar to WCF
  • 非常快的http.sys事件驱动的HTTP服务器,运行在内核模式;
  • 准备好使用 AJAX 客户端;
  • 大量改进和修复;
  • 现在称为Synopse mORMot Framework

具有 Delphi 的所有优点,即小而快的可执行文件,不需要运行时/框架,提供所有源代码(没有黑盒方法),没有特定的操作系统,也没有额外的成本。

请参阅this blog article 以了解 mORMot 如何可能是第一个提供实现领域驱动设计所需的所有砖块的 Delphi 框架。使用比“经典”Java 或 .Net 实现更轻、更快的解决方案。

结束编辑/更新

我开发了一个基于 ORM RESTful JSON 的框架,使用 SQlite3 实现其数据库持久性。

当然,它不像 Bold 或 OPF 那样完整(没有 UML 或 OCL),但它可以工作,并且在 Delphi 7 到 Delphi 2010 之前已经过测试。它仍然得到维护,并且将永远存在,因为它是免费的,并且开源。

您拥有一些有趣的功能,例如集成用户界面生成和 i18n、报告和导出为 PDF、客户端/服务器服务、集成单元测试。它使用 JSON 进行数据传输,以及基于进程内通信、Windows GDI 消息、命名管道或 HTTP/1.1 的 RESTful 架构。所以它可以用于开发 AJAX 应用程序。

此框架与我们的 SynProject 工具完美集成,该工具从源代码创建文档,具有漂亮的图表和完整的文档可追溯性(它已用于满足我们使用此框架编写的医疗软件的 IEC 62304 要求)。因此,您没有 UML,但您手头有可用的文档和图表。

如果您对 ORM 和 Delphi 感兴趣,欢迎您加入开源之旅! http://blog.synopse.info/category/Open-Source-Projects/SQLite3-Framework

【讨论】:

  • 如果您不想要一个完整的框架,您可以使用: 1. 对象的基本序列化(使用 TReader/TWriter 或 ObjectBinaryToText/WriteComponent 和 ObjectTextToBinary/ReadComponent); 2. 一些直接转换为文本,例如使用我们框架的 SQlite3Commons.pas 中的 WriteObject() ReadObject() 属性。
  • 请参阅blog.synopse.info/post/2013/01/05/…,了解 DDD 与 Delphi 的一般介绍,以及 mORMot 如何提供所有需要的积木。
【解决方案4】:

这是当今 Delphi 中较大的缺陷之一。对于复杂的项目,只有旧的 TDataset 范式是不够的。

在 Delphi 2010 中编写一个简单的活动记录并不难。但是对于复杂的项目,您需要一些带有外部配置文件的 datamapper

我正在为 Delphi(DORM aka Delphi Object Relational Mapper)编写一个简单的 Hibernate。如果有人想参加,请在 bitTime [dot] 发送电子邮件给 d [dot] teti。

例如。以下是 DORM 的单元测试

procedure TTestDORM.TestUpdate;
var
  p: TPersona;  //TPersona is a PODO "Plain Old Delphi Object" TObject descendat
  guid: string;
begin
  p := TPersona.Create;
  p.Nome := 'Daniele';
  p.Cognome := 'Teti';
  p.Eta := 30;
  p.DataDiNascita := EncodeDate(1979,11,04);
  Session.Save(p);  //DORM do an INSERT
  guid := p.guid;
  Session.Commit;
  Session.StartTransaction;
  p := Session.Load(TypeInfo(TPersona), guid) as TPersona; //DORM do a SELECT
  p.Nome := 'Peter';
  Session.Save(p); //DORM do an UPDATE
  Session.Commit;
  CheckEquals(1, Session.Count(TPersona));
  p := Session.Load(TypeInfo(TPersona), guid) as TPersona;  //DORM do a SELECT
  CheckEquals('Peter', p.Nome);
end;

有人感兴趣吗?

【讨论】:

  • ORM 只是领域驱动设计的最底层。您将需要很多功能,主要是服务远程访问、安全性、工作流、客户端-服务器通信、身份验证...... DDD 不仅仅是一个 ORM!见domaindrivendesign.org
【解决方案5】:

我认为您可以使用 TMS Aurelius 和 TMS Data Modeler 完成这项工作

这是一个有趣的link

【讨论】:

  • 我不明白您如何在没有 SOA 的情况下实现域驱动设计架构(这是 OP 的要点)。 ;)
  • 你说得对,Bold 是 DDD 之前的框架,ECO 现在是 DDD 建模的一个参考,两者都不是基于 SOA。在 SOA 上实施 DDD 的需求是一个有争议的问题,at least in 2008。今天的 DDD 项目倾向于包括 SOA,因为它确实针对 DDD 项目的复杂性。 ECO 基于 SOA 之前的世界中已有 10 年历史的 ORM 技术。今天,DDD 期望的不仅仅是一个 ORM + 一个建模器。见this article for instance
  • @Arnaud Bouchez 他不能在上面添加一个 SOA 层吗? OP除了标签之外没有明确提到DDD,也许他只是没有将SOA与Bold / ECO一起使用
猜你喜欢
  • 2013-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-20
  • 1970-01-01
相关资源
最近更新 更多