什么是CSLA框架及其使用?
答案 0 :(得分:68)
我的经验来自我的经验,有一个1.7M的LOC代码库:
它允许您使用可靠的面向对象的主体和良好的关注点来构建您的应用程序。
是和否。大部分没有。
BusinessObject处理它自己的数据存储。这是关注的反分离。
"它允许你......"好吧,是的 - 一个空白的文本编辑器屏幕也是如此,但不会像MVC.NET框架那样强迫或鼓励你。恕我直言,里昂证券提供绝对零利益,以确保您使用它开发的代码遵循"坚实的OO原则"。事实上,在使用CSLA时,具有弱OO技能的编码员(根据我的经验,大多数人)会非常突出!祸了维护程序员。
CSLA是坚实的面向对象原则青睐组合而非继承的典型代表。 CLSA代码是不可测试的。因为继承的框架BusinessObject既是,也是,并且需要所有内容,所有这些都是一次又一次,所以您不太可能获得更多的测试覆盖率。你无法掌握所有内容,因为一切都紧密耦合。框架不适合依赖注入。这是代码的铁幕。
您的代码很难调试。呼叫堆栈变得非常深,当你靠近太阳的中心时可以说,一切都变成了反射 - "什么*& ^#方法被称为???"而你只是迷路了。周期。
编辑2016年3月7日
我可以在原帖后添加更多信息吗?两件事,也许是:
首先,感觉就像CSLA有一些承诺。如果我们知道如何将所有这些活动部件放在一起。但是CSLA是如此神秘,即使我们做得对的事情也会随着时间的流逝而腐败。恕我直言,没有一个非常强大的全团队CSLA资金,任何实施都注定失败。没有一个充满活力的开源"技术参考,培训和社区,它是无望的。在我的最终分析中,近十年来我们的CSLA代码只是复合技术债务。
其次,这是我最近的评论,下面是:
我们的复杂性通常似乎不适合CSLA基础设施 所以我们在框架之外写。这和廉价的劳动力导致了 猖獗的SRP违规行为让我在砖墙上管理动态 例如,规则应用程序。然后,CSLA父/子基础设施 传播复合对象验证,但我们并不总是想要c / p 关系,所以我们编写更多验证和存储代码。所以今天 我们的CSLA实施不一致&混乱。重构为 更好的CSLA将产生深刻的多米诺骨牌效应。那之后呢 最初注射CSLA基本上被放弃了。
结束修改
答案 1 :(得分:11)
CSLA是业务对象框架,允许您在数据层之上轻松创建业务对象。它允许您使用可靠的面向对象的主体和良好的关注点来构建您的应用程序。
我强烈建议您阅读Rocky Lhotka撰写的名为Expert C#2008 Business Objects的CSLA书籍。这不仅会教你这个框架,还会教授优秀的软件架构原理。
答案 2 :(得分:4)
我建议您阅读What is CSLA?页面,然后浏览CSLA .NET FAQ site。
有关最新发布的信息,请查看Using CSLA 4 ebook series。
答案 3 :(得分:4)
回复@radarbob https://stackoverflow.com/a/10922373/261363,希望我不会后悔并开始一场火焰战。
我们的团队一直在与CSLA开发一些LOB应用程序。根据我使用CSLA编写绿色现场应用程序和维护现有代码的经验,这是我对您的观点的回复。
BO不会假设它自己的数据持久性,你将有一个工厂来处理所有数据持久性,例如使用ORM映射到稍后保存的模型。
< / LI>很抱歉听到这一点,我确保在提交现有代码数据库之前研究框架文档并编写至少一个玩具应用程序。此外,您甚至可以下载和浏览CSLA代码。
你有BO - &gt;门户 - &gt;现有CSLA示例中不应该非常复杂的工厂可以很好地解释每个级别上发生的事情。
CLSA绝不应与ORM相混淆
正如您所希望的那样,业务对象很少映射到一个表,因此在保存时需要一些工作。在它们被映射到一个表格的情况下,您可以使用类似AutoMapper的东西将您的BO映射到1行中的POCO。
查看CSLA命令,只要你记住它们与你将坚持的POCO不同,也没有什么可以阻止你保持你的BO小到你想要的那么大。
在我们工作的项目中,我们能够轻松测试BO以确保业务逻辑正确。由于关注点分离得很好,我们单独测试了我们的工厂,以确保业务对象能够相应地保留。
有一次,我能够轻松地将部分BO放在MongoDB中,因此应用程序在混合数据库MSSQL和MongoDB上运行,而不必更改业务对象中的一行代码,我只需要做的就是更新工厂以使用Mongo而不是当前的ORM。
希望这能以公平的方式解决所有问题,
此致
答案 4 :(得分:3)
CSLA:基于组件的可扩展逻辑架构
简而言之,从网站上向我描述CSLA的一段是:
CSLA .NET使您能够创建一个面向对象的业务层,用于抽象和封装您的业务逻辑和数据。该框架可确保您的业务对象与所有.NET接口技术无缝协作,包括WinRT XAML,WPF,ASP.NET MVC,ASP.NET Web窗体,WCF,asmx服务,Windows Phone 7,Silverlight,Windows Workflow和Windows窗体。< / p>
为什么你可以使用它:
业务规则管理。一旦学习了业务规则系统,它就提供了一种在整洁的包中强制执行业务逻辑的方法。如果您的对象具有需要将Validation报告给父级最高级别的子对象,则有一种方法可以处理该问题。 (有关规则系统的更多信息,请参阅http://www.lhotka.net/weblog/CSLA4BusinessRulesSubsystem.aspx)
您是否拥有支持N级撤消所需的业务对象? CSLA BusinessBase具有烘焙的属性管理系统(如依赖属性),用于实现N级撤销(实际上已完全实现)等功能。(这也与业务规则管理有关。您可以在主要属性更改时触发验证,或者您可以根据另一个属性的值更改属性。)
数据门户管理。这是一个有趣的概念。如果我需要在本地执行数据操作,则可以为此配置CSLA。我还可以站起来引用我的业务对象库的WCF服务,并使用几行配置来创建WCF端点来管理数据操作。 WCF服务是CSLA框架的一部分。在行动中看到这一点很简洁。其他情况?当然!您的业务对象库不需要更改,DataPortal类根据您的配置确定是需要远程执行还是本地执行。
CSLA确实强迫您使用一些最初可能不自然的机制。我认为对于您选择实施的任何模式都是如此。但是,当涉及到实现面向服务的体系结构的挑战时,CSLA提供了很多。是的,您将有一名架构级开发人员编写您的一些库。但是,如果您正在构建企业级应用程序,那么您不应该这样做吗?
CSLA在正确构建时是可测试的。我们使用存储库模式用模拟层替换实际的dal,并在适当时以规范(使用NUnit / SpecFlow)和单位方式进行测试。
至于支持,包括Rocky本人,有一个贡献者社区,确保像Xamarin的CSLA.Net这样的事情成为现实。有咨询公司知道CSLA并定期使用它,具体取决于工作范围(不,不仅仅是我工作的咨询公司。)
考虑到所有因素,CSLA可能不适合您。像其他人一样,阅读网站和书籍(特别是Expert C#2008 Business Objects。)提问,因为CSLA社区倾向于提供高质量的建议。
答案 5 :(得分:1)
详细描述了CSLA here。新book是一个很好的起点。作为对本书的极大赞美,我建议您查看我们的CSLA 3.8 templates。 Rocky建议使用代码生成器,我们拥有一套领先的模板,可以让您立即启动并运行。
由于 -Blake Niemyjski(CodeSmith CSLA Templates的作者)