Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Castle activerecord ActiveRecord是个坏习惯吗?_Castle Activerecord_Castle - Fatal编程技术网

Castle activerecord ActiveRecord是个坏习惯吗?

Castle activerecord ActiveRecord是个坏习惯吗?,castle-activerecord,castle,Castle Activerecord,Castle,我开始了一个新的项目,最近我发现了castle项目activerecord,这似乎是一个很好的解决方案,但同时,它看起来真的很不传统。 我想知道,这种感觉是来自于学习新的东西(我应该习惯它),还是真的很糟糕 是Martin Fowler在企业应用程序架构模式中首次命名的设计模式。它非常常见,在流行的Ruby框架Rails中广泛使用 它与.Net世界中更常见的开发风格(使用DAOs)形成了对比,这也许可以解释为什么您感到不安 建议:阅读一些与您自己的项目类似的Ruby on Rails应用程序的源

我开始了一个新的项目,最近我发现了castle项目activerecord,这似乎是一个很好的解决方案,但同时,它看起来真的很不传统。 我想知道,这种感觉是来自于学习新的东西(我应该习惯它),还是真的很糟糕

是Martin Fowler在企业应用程序架构模式中首次命名的设计模式。它非常常见,在流行的Ruby框架Rails中广泛使用

它与.Net世界中更常见的开发风格(使用DAOs)形成了对比,这也许可以解释为什么您感到不安


建议:阅读一些与您自己的项目类似的Ruby on Rails应用程序的源代码,并评估您对大量使用ActiveRecord所产生的设计风格的喜爱程度。

这是一个不错的解决方案,但也有缺点


在企业应用程序架构模式中,Martin Fowler描述了几种设计构建在数据库之上的应用程序的方法。这些方法在应用程序与数据库解耦的方式上有所不同。他还描述了更多的解耦使更复杂的应用成为可能。ActiveRecord被描述为一种设计更简单应用程序的方法,但对于行为更复杂的应用程序,您需要一个独立于数据库的域模型,以及介于两者之间的对象关系映射器。

ActiveRecord在Ruby中工作得很好,但它不容易转移到所有语言。AR的核心功绩是表=类,行=实例的隐喻。这在Ruby中表现得相当优雅,因为类也是对象。在其他语言中,类通常是一种特殊的构造,然后您必须经历各种困难才能使其正常工作。这带走了它在Ruby中的一些自然感觉。

不,这是一个不错的实践。即使在.NET中,它现在也是一种相当成熟的模式。亚音速()和linqtosql也使用该模式

该模式的实现(如亚音速)对于快速轻松地创建用于管理应用程序CRUD的数据访问层非常有用


这并不意味着它是所有系统的好解决方案。对于大型复杂系统,您可能希望减少与数据存储的耦合。

域对象与服务层的混合是最大的错误做法(如果您认为这是一种错误做法的话)。最后调用user.Save(),这意味着如果要更改ORM,则依赖于此模式。这两个备选方案是一个层,也就是一组facade类,用于执行CRUD操作,或者将其放入域对象中

User.Service.Save(user);

如果您使用的是.NET,那么ActiveRecord显然是基于ActiveRecord的、Coolstorage的、亚音速的和超音速的

使用ActiveRecord让我感到奇怪的部分原因是必须从
ActiveRecordBase
继承,并且在对象上拥有所有这些持久性方法(
Save
等等)

但事实证明你不必这么做!而不是说:

[ActiveRecord]
class Customer : ActiveRecordBase<Customer> { }

然后使用
ActiveRecordMediator
。它的静态方法与
ActiveRecordBase
基本相同,但通过这种方式,您不必将对象模型与它们混在一起。如果您不需要ActiveRecordBase中的各种受保护方法事件挂钩,这可以使事情变得更简单。

我认为ActiveRecord与Castle没有太多关系,因此,这个问题的答案可能对许多人更有启发。

如果您能举一些例子,说明使用活动记录是一个糟糕的解决方案,我将不胜感激。
[ActiveRecord]
class Customer : inherit from whatever you want { }