Codesmith 是一个可行的 ORM 工具(还是我应该坚持使用真正的 ORM)[关闭]
Posted
技术标签:
【中文标题】Codesmith 是一个可行的 ORM 工具(还是我应该坚持使用真正的 ORM)[关闭]【英文标题】:Is Codesmith a viable ORM tool (or should I stick with a true ORM) [closed] 【发布时间】:2009-02-24 19:37:00 【问题描述】:我正在购买 ORM 工具。我正在为购买 CodeSmith(目前可以以相当大的折扣购买)和 ORM 工具而苦恼。
LINQ to SQL 不在我的列表中; SubSonic 2.x 不在列表中(我不想在知道 SubSonic 3.0 即将到来的情况下投资那个死胡同。NHibernate 和 LLBLGEN 一样似乎有点矫枉过正。我只是简要评估了 EF,但没有很快得到一个温暖而模糊的感觉。
我是否疯狂地认为 CodeSmith 是现成 ORM 的合理替代品? CodeSmith 会以其他方式为自己买单吗?
请注意,我与任何供应商都没有任何关系,这不是一个便宜的问题,只是为了产生产品噪音!我正在寻找关于 CodeSmith 作为 ORM 工具(及其提供的或社区可用的)模板的诚实建议和意见。
【问题讨论】:
为什么 LINQ to SQL 不在您的列表中?如果您正在寻找一种简单的数据映射方法,那就太好了。 (这当然不是矫枉过正;也许在某些事情上矫枉过正:))。 LINQ to SQL 或 LINQ to Entities 对您来说缺少什么? LINQ to SQL 是个死胡同——不妨使用 SubSonic 2.0! 你所说的“死胡同”是什么意思?它工作正常。 死亡这个词可能太强了。但它显然已被弃用。去谷歌上查询。 MS 认为 EF 是可行的方法。 【参考方案1】:其实hibernate是一个不错的ORM工具。但它停在那里!
Code smith 的能力可以不仅仅是一个关系映射人员!我使用 Code smith 来生成一些 UI 表单、业务层(模板)、数据访问层、模式等。 但是要与 Code smith 合作,您可能需要良好的系统设计经验或使用我不喜欢使用但我喜欢作为示例的模板。
Code smith 方法有一个特殊的缺点;您必须首先考虑数据库实现来设计您的系统。如今,在对象分析方法中,人们在任何数据库实现之前就成功实现了业务逻辑和实体——他们忘记了这一点。
决定是艰难的;我经常阅读重要的名字,例如 Scott W. Ambler、Kent beck、Robert C. Martin 和实用程序员系列中推荐使用 ORM 工具来加速开发的人。他们说 ORM 工具开发人员关心所有数据库问题(池、连接、数据库供应商细节等)。因此,当我们必须设计数据访问层时,我们也必须考虑所有这些方面。
我相信这些 ORM 工具带来了负担。我还不知道这些工具在低预算项目中的表现如何(我的意思是不是好的托管服务器或任何类型的共享资源)。 我见过没有经验的开发人员在尝试宣传他们钟爱的工具时没有考虑到这一点。但是在java项目中,hibernate已经是一个广为人知的工具了。我毫不怀疑已经使用这项技术交付了伟大的项目,但我已经看到任何人一次又一次地 Java 开发人员可能需要教我们(.net 开发人员)如何构建出色的解决方案。 (对不起,我们不得不承认。)
我唯一建议的是考虑您的上下文。你在做一个新系统吗?你需要有规律的工作吗?你有没有尝试过完全考虑这样的代码生成器和 ORM 工具?
我更喜欢 Code smith,因为我一次生成整个解决方案,而不仅仅是数据访问层。代码生成非常重要,微软在visual studio.net 2008 等中模仿了code smith 的方法也很重要。
祝你好运
【讨论】:
很好的答案,谢谢你,Eduardo。【参考方案2】:Code Smith 不是 ORM,它只是一个代码生成器 IDE。
您可以根据您的数据库使用 code smith 生成 DAL,但这会破坏使用 ORM 的目的(其中一个),ORM 基本上是动态生成 DAL,因此您不必编写代码。
如果您真的想比较两者,那么使用 code smith 可能会获得一些好处,因为您可以完全控制生成的代码,但我不确定这种好处是否会超过使用 code smith 的缺点结果可能需要花费几个月的时间来编写代码史密斯模板以根据您的数据库生成 DAL。
然后您必须考虑对数据库进行更改时会发生什么,您很可能每次都必须运行 code smith 并进行构建。一个好的 ORM 将允许您在模式中配置数据库更改,然后它将动态生成,因此您不必(尽可能多地)担心对数据库进行更改。
【讨论】:
虽然大多数人会使用 netTiers 模板,但从不真正打开 CodeSmith Studio。 或者 Plinqo 模板,如果他们想要 Linq-to-Sql【参考方案3】:NHibernate 是要走的路。它是一个企业级的 ORM。并且使用来自FluentNHibernate 库的基于约定的自动配置,如果您坚持单一约定(您可以指定约定,或者有默认值),配置会非常简单。
使用 NHibernate,您的域对象是纯 C# 对象。没有奇怪的基类。每次您决定进行更改时,都不需要刷新代码生成的文件。
【讨论】:
您可能希望使用 Codesmith 从您的数据库中生成您的 C# 类,以帮助您开始使用 NHibernate【参考方案4】:我每天都使用 netTiers,我很喜欢它。它的文档很烂,但它在办公室为我节省了很多时间。很多人抱怨它生成的代码量,但据我所见,它创建的代码比手工编码要快得多。它还生成基本 CRUD 内容所需的所有 sproc。它生成的访问方法也非常棒,可以获取所有唯一键、外键和主键。
【讨论】:
谢谢你,格罗默。这有帮助。 不要忘记 NetTiers 文档对社区开放。你可以随时贡献! :)【参考方案5】:我认为 Codesmith 的使用是可行的。但是您应该研究使用它的框架。 Net Tiers 是一个应用程序框架,可以在此基础上构建一个好的 DAL。
【讨论】:
【参考方案6】:为什么像 LLblgen 这样的东西会矫枉过正?我们在工作中使用它,经过一段陡峭的学习曲线后,它非常好:)。您至少应该尝试一下并进行休眠。
虽然不确定这与 codesmith 有什么关系,那是一个代码生成器,你可以推出自己的 ORM,但由于已经有好的 ORM,我认为除非你想做,否则不值得花时间和精力用于学习目的。
【讨论】:
【参考方案7】:使用 netTiers 和 .netMVP。 NetTiers 是一个非常好的 DAL,而 .netMVP 是我刚刚发布的一个框架,用于支持 UI 级别的抽象。 :)
http://community.codesmithtools.com/CodeSmith/m/templates/42499.aspx
【讨论】:
【参考方案8】:几年前我使用过 LLblgen。我希望我所看到的已得到修复。我们查看了生成并查看的内联 SQL,用于选择传入主键的一行数据:
SELECT DISTINCT * FROM TABLE WHERE primark_key_id = @primarykey.
真的吗?我总是恳求改为使用存储过程,但项目负责人拒绝了。我不确定编写低效代码节省了多少时间。
【讨论】:
以上是关于Codesmith 是一个可行的 ORM 工具(还是我应该坚持使用真正的 ORM)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章