什么是CSLA框架及其使用?

时间:2009-08-05 16:09:32

标签: csla

什么是CSLA框架及其使用?

6 个答案:

答案 0 :(得分:68)

我的经验来自我的经验,有一个1.7M的LOC代码库:

  1. CSLA适用于分布式应用程序/数据库环境。这就是基本业务对象是并且做所有事情的原因,例如它自己的数据持久性。一个对象(以及与其状态远程关联的所有对象)旨在被序列化,发送到不同的应用程序和/或数据服务器并工作。
  2. 如果上述问题不是你需要解决的问题,那么CSLA就是过度杀伤,很重要。我们的开发团队对已经致力于CSLA感到遗憾。
  3. 在复杂的Windowed UI中处理所有CSLA球很难。我们有多标签屏幕(可以依次打开子屏幕),除非你按照“从左到右,从上到下"数据输入流程,并经常单击保存,最终将不完整的数据放入/取出数据库;或者完全删除您刚刚输入的数据。是的,我们的原始编码器有问题,但CSLA也是如此......似乎有很多移动部件可以启用,控制和协调CSLA功能。这就像必须处理所有的拨号盘和当你真正需要的东西更像是塞斯纳152时,战斗机的开关。
  4. 您将编写大量自定义代码以启用CSLA功能。例如,CSLA永远不会与Hibernate和Entity Framework等对象关系映射器(ORM)工具混淆。我们的SAVE()方法非常简单,所以它们也是微不足道的。
  5. 鼓励使用代码生成器复合问题。我们使用CodeSMith从数据表生成类。因此,我们最终得到的代码具有1-1到c#类的对应关系。因此,您必须编写所有代码来处理数据存储到您的"真实"对象。
  6. 使用CSLA进行数据存储/获取非常低效。由于Behemoth,单片BusinessObject-all-all-and-known-all中心范例,对象最终会进行一次一对象的数据获取和实例化。复合对象的集合显着地使问题复杂化。单个"得到这个对象"总是导致一系列单独的数据提取(每个单独对象一个或多个)来实例化整个继承&复合关系链。它被称为" N + 1查询问题。"哦,并且获取数据总是会导致创建一个新对象,即使我们只是更新现有对象。难怪我们更复杂的屏幕是FUBAR。
  7.   

    它允许您使用可靠的面向对象的主体和良好的关注点来构建您的应用程序。

    是和否。大部分没有。

    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书籍。这不仅会教你这个框架,还会教授优秀的软件架构原理。

You can grab the book here on Amazon

答案 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编写绿色现场应用程序和维护现有代码的经验,这是我对您的观点的回复。

  1. BO不会假设它自己的数据持久性,你将有一个工厂来处理所有数据持久性,例如使用ORM映射到稍后保存的模型。

    < / LI>
  2. 很抱歉听到这一点,我确保在提交现有代码数据库之前研究框架文档并编写至少一个玩具应用程序。此外,您甚至可以下载和浏览CSLA代码。

  3. 你有BO - &gt;门户 - &gt;现有CSLA示例中不应该非常复杂的工厂可以很好地解释每个级别上发生的事情。

  4. CLSA绝不应与ORM相混淆

  5. 正如您所希望的那样,业务对象很少映射到一个表,因此在保存时需要一些工作。在它们被映射到一个表格的情况下,您可以使用类似AutoMapper的东西将您的BO映射到1行中的POCO。

  6. 查看CSLA命令,只要你记住它们与你将坚持的POCO不同,也没有什么可以阻止你保持你的BO小到你想要的那么大。

  7. 在我们工作的项目中,我们能够轻松测试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的作者)