什么是CSLA框架及其用途?
通过我使用一个1.7M行代码库的经验得出的看法:
它允许您使用坚实的面向对象原则和良好的关注点分离来设计应用程序。
是与否。主要是否。
BusinessObject处理自己的数据存储。这是反对关注点分离的。
“它允许您...” 好吧,是的 - 空白文本编辑器屏幕也是,但不像例如MVC.NET框架那样强制或鼓励您。在我看来,CLSA绝对没有确保您使用它开发的代码遵循“坚实的OO原则”的任何好处。实际上,弱OO技能的编码人员(在我的经验中占大多数)使用CSLA时真的会很突出!维护程序员要小心。
CSLA是坚实的面向对象原则中“优先组合而非继承”的代表。CLSA代码不可测试。由于继承的框架BusinessObject既是、又是、需要一切,每次都是这样,所以不太可能得到很高的测试覆盖率。您无法获得部件,因为所有东西都紧密耦合。该框架不适合依赖注入。它是一道钢铁之幕。
您的代码将难以调试。调用堆栈变得非常深,当您接近太阳的中心时,一切都变成了反射 - “哪些方法刚刚被调用了????” 然后您就会迷失,没有办法。
编辑 2016年3月7日
我在原帖后还能补充什么更深入的见解呢?也许有两件事:
首先,CSLA似乎具有一定的前途。只要我们知道如何将所有这些组成部分一起协调起来。但是,CSLA是如此神秘,以至于即使我们做得很对的事情随着时间的推移也会变得不好。依我之见,如果没有一个非常强大的团队范围的CSLA基础,任何实现都注定要失败。如果没有一个充满活力的技术参考、培训和社区的“开源”,那就没有希望了。在近十年中,我的最终分析是,我们的CSLA代码只在增加技术债务。
其次,这里有我最近发表的评论:
我们的复杂性通常似乎不适合CSLA架构,因此我们在框架之外进行编写。这和廉价劳动力导致 SRP 违规猖獗,并导致我在管理动态规则应用程序时遇到了瓶颈。然后,CSLA父/子架构会传播组合对象验证,但我们并不总是想要c/p关系,所以我们编写更多的验证和存储代码。所以今天我们的CSLA实现是不一致和令人困惑的。重构为更好的CSLA将产生深远的连锁反应。因此,在那个最初的注入之后,CSLA基本上被放弃了。
编辑完毕
CSLA是一个业务对象框架,可让您轻松创建基于数据层的业务对象。它允许您使用坚实的面向对象原则和良好的关注点分离来设计应用程序。
我强烈建议您阅读Rocky Lhotka撰写的Expert C# 2008 Business Objects中介绍的CSLA书籍。这不仅将教您有关该框架的知识,还将教您良好的软件架构原则。
BO不能自行进行数据持久化,您需要一个工厂来处理所有数据持久化,例如使用ORM映射到稍后保存的模型。
很遗憾听到这个消息,我确保学习框架文档并在提交现有代码数据库之前编写至少一个玩具应用程序。此外,您甚至可以下载并浏览CSLA代码。
您有BO->门户->工厂,这不应该很复杂,现有的CSLA示例可以很好地解释每个级别发生了什么。
CLSA永远不应与ORM混淆。
正如您所应该的那样,业务对象很少映射到一个表,并且因此在保存时需要进行一些工作。如果它们映射到一个表中,则可以使用AutoMapper将BO映射到POCO中的1行。
研究CSLA命令,同时没有任何限制使您保持BO的大小或大小不同,只要记住它们与您将持久化的POCO不同即可。
在我们开发的一个项目中,我们能够轻松测试BO以确保业务逻辑是正确的。由于关注点的良好分离,我们单独测试了工厂,以确保业务对象将得到相应的持久化。
有一次,我能够轻松地将我的BO的部分持久化到MongoDB中,因此应用程序在混合数据库MSSQL和MongoDB上运行,而无需甚至更改我的业务对象中的一行代码,我所需要做的就是更新工厂以使用Mongo而不是当前的ORM。
希望这个回答公正地回答了您所有问题。
问候
CSLA: 基于组件的可扩展逻辑架构
网站上对CSLA的简要描述如下:
CSLA .NET使您能够创建一个面向对象的业务层,抽象和封装了您的业务逻辑和数据。该框架确保您的业务对象与所有.NET接口技术(包括WinRT XAML、WPF、ASP.NET MVC、ASP.NET Web Forms、WCF、asmx服务、Windows Phone 7、Silverlight、Windows Workflow和Windows Forms)无缝协作。
你为什么要使用它:
业务规则管理。一旦您学习了业务规则系统,它提供了一种整洁的方式来执行业务逻辑。如果您有一个带有子对象的对象需要向父级报告验证结果,则有一种处理方法。(有关规则系统的更多信息,请参见http://www.lhotka.net/weblog/CSLA4BusinessRulesSubsystem.aspx)
您有需要支持N级撤消的业务对象吗?CSLA BusinessBase具有内置的属性管理系统(类似于依赖属性),可以实现N级撤消功能(实际上完全实现了)。 (这也与业务规则管理相关。您可以在主属性更改时触发验证,或者根据另一个属性的值更改属性。)
数据门户管理。这是一个有趣的概念。如果我需要在本地执行数据操作,则CSLA已经为此进行了配置。我还可以启动引用我的业务对象库的WCF服务,并使用几行配置来创建WCF端点以管理数据操作。WCF服务是CSLA框架的一部分。看到这一点真是太棒了。其他情况?当然!您的业务对象库不需要更改,DataPortal类会根据您的配置确定是否需要远程或本地执行。
CSLA确实强制使用一些机制,这些机制可能一开始并不自然。我认为这在实现任何模式时都是有些真实的。但是,在实现面向服务的架构的挑战方面,CSLA提供了很多东西。是的,你需要让一位架构师级别的开发人员编写一些库。但是,如果您正在构建企业级应用程序,那么您难道不应该已经这样做了吗?
正确设计的CSLA是可测试的。我们使用存储库模式来替换实际的dal,并通过规范(使用NUnit / SpecFlow)和适当的单元方式进行测试。
至于支持,包括Rocky本人,有许多贡献者社区确保像CSLA.Net for Xamarin这样的东西成为现实。有一些咨询公司了解CSLA并根据工作范围定期使用它(不仅仅是我工作的咨询公司)。
综合考虑,CSLA可能不适合你。就像其他人指出的那样,阅读网站和书籍(特别是《Expert C# 2008 Business Objects》)。提出问题,因为CSLA社区倾向于提供高质量的建议。
关于CSLA的详细描述请参见这里。新书籍是一个很好的起点。作为书籍的绝佳补充,我建议您查看我们的CSLA 3.8模板。Rocky推荐使用代码生成器,而我们拥有领先的一套模板,可以让您快速上手。
谢谢 -Blake Niemyjski(CodeSmith CSLA Templates作者)