我公司的主要网络应用程序正迫切需要一个漂亮的库,使其以某种方式维护和可扩展性,和我的一个同事曾建议CSLA。 所以,我买了这本书,但为:
程序员不读书了
我想衡量它的SOFlow社会各界的意见。
因此,这里是我的问题:
- 怎么可能人在使用CSLA?
- 优缺点都有什么?
- 难道真的CSLA不适合在TDD?
- 我有什么办法?
- 如果您已经停止使用它或反对的原因决定的?
我公司的主要网络应用程序正迫切需要一个漂亮的库,使其以某种方式维护和可扩展性,和我的一个同事曾建议CSLA。 所以,我买了这本书,但为:
程序员不读书了
我想衡量它的SOFlow社会各界的意见。
因此,这里是我的问题:
之前我专门回答你的问题,我想提出一些想法记下来。 是为您的项目CSLA吗? 这取决于。 我个人认为里昂证券对于没有价值的单元测试作为一个高优先级的基于桌面应用程序。 如果你想轻松扩展到n层应用CSLA是伟大的。 CSLA往往会得到一些高射炮,因为它不允许纯粹的单元测试。 这是真实的,但像任何技术,我认为没有唯一正确的方法 。 单元测试可能不是你正在从事特定项目的东西。 因为适合一个团队,一个项目可能不适用于其他球队或其他项目。
也有在问候CSLA许多误解。 这不是一个ORM。 它不是(CLSA使用Business Objects公司与NHibernate的数据访问配合得很好在一起的事实)的竞争对手NHibernate的。 它成为正式的移动对象的概念。
1.有多少人正在使用CSLA?
基于该CSLA论坛 ,我会说,有相当多的基于CSLA项目在那里的。 老实说,虽然,我不知道有多少人真正使用它。 我已经在过去使用它的两个项目。
2.哪些利弊?
虽然很难在很短的列表来概括,这里是一些亲/ CON的的浮现在脑海中。
优点:
缺点:
3.阅读这并不CSLA真的不适合与TDD之后?
我还没有发现这样做TDD与里昂证券的有效途径。 这就是说,我相信有很多聪明的人在那里比我可能有更大的成功尝试这样做。
4.我有什么办法?
领域驱动设计主要的时刻越来越大的推动(这是理所当然的 - 这是梦幻般的某些应用程序)。 也有一些有趣的图案从引进LINQ的(和LINQ to SQL,实体框架等)的发展。 福勒斯书POEAA ,记录了很多模式,可能适合你的应用程序。 请注意,某些模式竞争(即活动记录和存储库),从而意味着用于特定的场景。 虽然CSLA不完全匹配任何在这本书中描述的图案,它最接近的Active Record(虽然我觉得这是短视声称对这一模式的精确匹配)。
5.如果您已经停止使用它或反对的原因决定的?
我没有完全建议CSLA我的最后一个项目,因为我相信应用的范围是里昂证券提供的好处太大。
我不会在Web项目中使用CSLA。 我觉得还有其他的技术更适合在这种环境中构建应用程序。
总之,虽然里昂证券是什么,但一个万能的 ,它是适用于某些场景。
希望这可以帮助!
阅读所有的答案后,我注意到,不少人对CSLA一些误解。
首先,CSLA不是一个ORM。 我怎么能这样说所以肯定? 由于罗克福德Lhotka已表示它自己多次在.NET岩石和Hanselminutes播客采访。 寻找在那里洛基被采访的任何情节,他会毫不含糊地说明它。 我认为这是人们了解最关键的事实,因为几乎所有关于从认为它是一个ORM或试图使用它作为一个CSLA流动的误解。
布拉德·利奇在他的回答暗示,CSLA对象模型的行为,虽然可能更准确的说,他们的模型数据的行为,因为数据是不可或缺的他们。 里昂证券是不是一个ORM,因为它是完全不可知你如何跟你的数据存储。 您应该使用某种与里昂证券的数据访问层,甚至一个ORM。 (我做的。我现在用的实体框架,它精美的作品。)
现在,单元测试。 我从来没有任何困难,单元测试我的里昂证券的对象,因为我不直接把我的数据访问代码到我的业务对象。 相反,我使用存储库模式的某种变体。 该库是由CSLA消耗,而不是周围的其他方法。 通过在假仓库换了我的单元测试,并使用本地数据门户,BOOM! 这很简单。 (一旦实体框架允许使用波苏斯的,这将是更清洁。)
所有这一切都源于意识到里昂证券是不是一个ORM。 它可能会消耗一个ORM,但它本身不是一个。
干杯。
我想我会做一些更多的评论。
有些人表示,相比之类的LINQ to SQL等CSLA很冗长。 但在这里我们要比较苹果和橘子。 的LINQ to SQL是一个ORM。 它提供了一些事情,里昂证券不和里昂证券提供了一些东西L2S没有,想通过各种远程数据门户集成验证和n -tier持久性。 其实,我想说的是过去的事情, 正 -tier持久性,胜过他们为我所有。 如果我想使用实体框架或LINQ to SQL的过网,我必须把像WCF之间,而且极大地乘以工作和复杂性,在那里我觉得它比里昂证券更详细点。 (现在的我,WCF,REST和SOA的粉丝,但使用它,你真的需要它,当你想公开服务,以第三方,如对于大多数业务线 - 应用程序,它不是真正需要的,而里昂证券是一个更好的选择。)事实上,里昂证券的最新版本,洛基提供WCFDataPortal
,我已经使用。 它的伟大工程。
我的粉丝SOLID ,TDD等现代软件开发的原则,何实际使用它们。 但我认为CSLA的好处超过了其中一些正统的反对意见,并且在任何情况下,我已经成功地使CSLA TDD的工作得非常好(容易地),所以这不是一个问题。
是的,我(嗯,我们)用它广泛我们认为主要是在Windows窗体应用程序数据绑定形式的业务流程逻辑建模。 该应用程序是一个交易系统。 里昂证券被设计成在该层只是UI下方。
如果你认为你的标准的复杂的业务线应用程序,你可以有许多领域,许多规则对这些领域(包括交叉领域的验证规则)形式,你可以调用一个模式对话框编辑一些子对象,你可能希望能够能够取消该对话框并恢复到以前的状态。 CSLA支持这一点。
它的缺点是,它有一个学习曲线。
需要记住的重要事情就是用CSLA来模拟用户如何与一些申请表格交互。 对我来说,最有效的方法是设计的UI,并了解它的建设CSLA对象之前流,行为和验证规则。 没有你的CSLA对象驱动的UI设计。
我们还发现它非常有用,能够利用里昂证券的业务对象服务器端验证从客户端发送的对象。
我们也有内置的机制来对Web服务异步执行验证(即检查对方的反对主的信用额度范围内)。
CSLA强制执行你的UI,BusinessLogic和持久性之间有很强的分离与我们写的对他们的单元测试的负载。 因为你是从UI设计,驾驶它这可能不是严格TDD,这并不意味着它不是测试。
唯一真正的选择是创建自己的模型\业务对象,但很快你就会是里昂证券提供开箱即用的功能实现(INotifyPropertyChanged的,IDataErrorInfo的,pushState的,PopState等)
几年前我曾与它的经验。 这是一个辉煌的建筑,但非常复杂,很难理解或变化,它解决了我们大多数的开发基于Web的应用程序并不一定有问题。 它是基于Windows的应用程序和处理多级撤消开发更多,而重中之重是事务性的逻辑。 你可能会听到人们说,因为Web应用程序是在页面级别的请求 - 响应,这是不合适的,但随着AJAX风格的Web应用程序也许这种说法不成立这么多的水。
它有一个非常深的对象模型,它可能需要一段时间才能真正环绕它你的大脑。 当然,有很多可以在几年内发生改变。 我很想听听其他最近的意见。
所有的事情考虑,它不会是我的建筑的第一选择。
我已经使用CSLA一个项目和它的工作很大,使事情更加简单和整洁。
而不必在各自不同的个人风格你的团队撰写的业务对象,我们知道有一个共同的标准来对着干。
//安迪
在里昂证券的防守,虽然我有很多已经作出特别的单元测试一个评论的同意...
我公司用它广泛用于Windows窗体数据录入应用,具有高度的成功。
整体来说,我要说的是,不是由利益outwayed,它造成的任何问题较多。
更新:继我们仍然使用它为我们的窗户此窗体应用程序,但与使用它的其他应用程序,如Web站点的实验表明,它可能是繁琐的,当你不需要的诸多功能,现在我们正在调查重量更轻选择这些方案。
我加入了一个团队里CSLA是强制性的。 我们不使用远程数据门户,是唯一的原因,我可能会同意这一框架的使用。 我从来没有买成CSLA的想法,所以也许这就是为什么我没有什么,但问题吧,对不起。
一对夫妇的问题:
我不需要我的代码和.NET框架,这正是这个框架觉得我之间的路障。 我有列表对象有限的选择,而我不得不忽略.NET框架富豪榜的对象。
II是完全荒谬的,我们有这些只读列表,然后将非只读列表。 所以,如果我有一个项目添加到列表中,我不得不重新创建整个列表...你是认真的?
然后CSLA要管理哪些是好的,但没有什么是真正暴露我的对象的状态。 有时我想改变一个对象的状态,而不是手动再次获取它,这似乎像什么CSLA要我做的。 我基本上最终创造了许多属性来公开选项里昂证券并不认为我应该直接访问。
为什么我不能只是实例化一个对象? 我们最终创建静态方法,它实例化一个对象并将其传递回...你在开玩笑吗?
检查框架源代码和它看起来笨重的反射代码给我。
理由使用CSLA:
你的开发人员没有经验丰富的,不能把握的模式的概念,然后将CSLA几乎具有相同的页面上的每一个人。
因为我们认为这将与我们的模型层的帮助下,我们开始使用CSLA。 有几分矫枉过正,大多都我们现在使用的是类的SmartDate,只是因为我们已经链接到库中。
我们认为这个验证的接口将真正帮助我们执行业务规则,但它并没有与WCF和系列化很好地工作(我们仍然停留在2.0.3.0版本,这样的事情可能会改变)。
不采取CSLA名单,但使用它之前,研究的优势,并确保他们真正适用。 将你的团队能够正确/始终如一地贯彻了吗? 远程处理和门舞需要的?
我认为超越了所有的理论思考,它是所有关于清洁/维护/扩展/测试的代码如下基本成熟的模式。
我数的在从CSLA变换后的项目的特定域所需的代码行。 所有不同CSLA对象(只读+编辑+根+列表组合)以及它们的存储的特效之间花了大约1700线,相对于一个LINQ2SQL +库实现,它采取了180行。 该LINQ2SQL版本包括你的团队并不需要消耗的书,了解生成的类的居多。 是的,我用的CodeSmith生成里昂证券部分,但我现在相信,在与单一职责位DRY代码,里昂证券执行现在看起来对我来说,昨天的英雄。
作为替代方案,我想建议寻找到LINQ2SQL /实体框架/ NHibernate的与库和的UnitOfWork模式结合起来。 看一看http://www.codeplex.com/backgroundmotion
干杯!
公司实行CSLA在一些项目和一些传统项目依然是CSLA的。 其他项目搬到远离它,因为里昂证券违反了简单明了的OOP原则:单一职责原则。
CSLA对象是自持的,如他们找回自己的数据,他们管理自己的行为,他们自救。 很不幸,这意味着你的平均CSLA对象至少有三个职责 - 代表域模型,包括业务规则,以及包含数据访问定义(不是DAL,或数据访问实现,正如我前面提到/隐含的)都在同一时间。
我们使用CSLA现在超过五年了,我们认为它的伟大工程,为构建业务应用。 加上代码生成,你可以在一段时间相对短量创建的业务对象和集中你的努力上的应用程序的肉 。
我们使用CSLA广泛。 有几个好处; 首先,我认为,企业开发的每一行应该读洛基Lhotka的书对Business Objects的编程。 我个人认为它是在我的前3名最好的编程书过。 里昂证券是基于这本书的框架,并用它给你的项目获得像n级撤消,验证规则和可扩展性的架构非常高的水平的功能,同时为您提供细节。 请注意,我说:“提供”,而不是“隐藏”。 我发现,CSLA的最好的部分是让你了解所有的这些东西都实现到源代码,而不让你自己重现出来。 您可以选择使用尽可能多或一些功能,因为你需要,但我发现,通过保持忠于框架的设计模式,它真的让你摆脱困境。 --Byron
我是新来CSLA,但我理解的概念,我已经明白,它不是一个ORM工具,以便退出殴打那个该死的鼓乡亲。 还有我喜欢CSLA的功能,但使用起来感觉有点像有幕后魔术师。 我想,如果你不介意不知道它是如何工作的,那么你可以使用的对象,他们工作得很好。
有适合初学者一个大的学习曲线,我认为这将具有5-15分钟大大受益。 像微软的视频有学习的基础。 或者怎么样释放配套书的代码,而不是越来越发布的代码,并采取几个月能找到这本书呢? 只是在说Lohtka先生......我们开始这本书之前,建设我们的东西,我挣扎的全部时间。 但是就像我说的,我是新来的吧。
我们使用CSLA。 我们做了我们的对象适合自己,然后用模具的框架下提供的东西10%。 对象级撤消? 没有使用它。 n层的灵活性? 没有使用它。 我们结束了书面我认为我们得到了CSLA的唯一的事是够复杂的业务规则的代码。 一些“在牙齿长”开发商知道框架中使用它作为他们的锤子,因为他们有需要打一个钉子。 里昂证券在他们的皮带和我的猜测是很多框架的支持者看到的东西从这个角度太。
我想我们的经验丰富的开发人员很高兴,因为这一切对他们有意义。 我想,如果你的组织没有新手程序员和你们写有很好形成的图案高效和简单的POCO对象感到厌倦,然后去了。 使用CSLA。
我使用CSLA作为一个中等规模的项目的业务对象框架。 该框架已经从VB6日子很长的路要走,并提供灵活数额特别巨大和“开箱即用”的功能。 CSLA的移动智能对象,使UI开发变得更加容易。 不过,我同意别人它不是任何情况下都正确的工具。 肯定是有一些开销参与,但也有很多的力量。 就个人而言,我很期待使用CSLA灯使用Silverlight。
1件好事,因为数据访问技术永远保持不变很长时间。
2这与最新版本的框架变得更好。
我一直在使用CSLA因为VB5,当它被更多的模式集合的比它的框架。 通过引入of.NET,CSLA变成一个完全成熟的框架,与沉重的学习曲线来了。 不过,里昂证券解决了很多的事情,所有的业务开发人员往往对自己在某些时候写(取决于项目范围):验证逻辑,验证逻辑,撤消功能,肮脏的逻辑,等等,所有这些东西,你得到解脱出来的盒一个不错的框架。
正如其他人所指出的,是一个框架,它迫使开发商以类似的方式来编写业务逻辑。 这也迫使你为你的业务逻辑提供一个抽象层,使不使用的UI框架,如MVC,MVP,MVVM不会变得如此重要。
事实上,我认为,为什么有这么多这些UI模式的今天如此夸大了(在微软的世界)的原因是人们一直在做的东西居然错了这么长时间(即,在UI使用DataGrid中,洒向你的业务逻辑无处不在。TISK TISK)。 正确设计从一开始你的中间层(业务逻辑),你可以重新使用任何UI你的中间层。 赢形式,ASP.NET/MVC,WCF服务,WPF,Silverlight的**,Windows服务,...
但是,除了这些,对我来说是巨大的回报一直是它的内置的扩展能力。 里昂证券使用代理模式是通过您的配置文件进行配置。 这使您的业务对象实现从服务器到服务器的远程调用,而无需编写代码的一个舔。 添加更多的用户到你的系统? 没问题,部署里昂证券的业务对象,以新的应用程序服务器,做一个配置文件条目的变化,和BAM! 即时的可扩展性的需求得到满足。
与此相比,使用DTO的,在客户端上存储你的业务逻辑(无论客户端而定),并具有写你的每一个自己的CRUD方法为服务方法。 YIKES! 并不是说这是一个不错的办法,但我不想这样做。 不是当有一个框架在那里基本上做到这一点对我来说。
我要重申一下其他人都在说CSLA不是一个ORM。 CSLA迫使你与数据提供业务对象。 他们不关心你在哪里得到你的数据。 您可以使用ORM与数据提供业务对象。 你也可以使用原始ADO.NET,其他服务(基于REST,SOAP),Excel电子表格,我可以继续下去在这里。
至于你对TDD的支持,我从来没有使用与CSLA这种方法无论是尝试。 我已在这里我使用类和序列图,通常允许使用的情况下,屏幕和/或工艺设计,以决定我的中间层(ALA业务对象)模型的办法。 或许有点老派,但UML一直担任我非常好,我设计和开发工作。 我已经成功地设计和开发非常大的,可扩展的应用程序至今仍在使用。 而直到WCF RIA的成熟,我会继续使用CSLA ..
**一些变通
很多人建议使用代码生成与CSLA。 我建议你检查我们的支持模板集,因为它们会增加你的投资回报率极大。
由于-Blake Niemyjski(的作者CodeSmith中CSLA模板 )
我几年前用它的一个项目。 但是,当项目完成后,我不能告诉任何人CSLA为我做的。 当然,我从它的类继承。 但是,我能够从几乎所有类删除继承,没有重组。 我们没有使用了N层的东西。 该n级撤消是如此之慢,我们不能使用它。 所以我想在最后它只是帮助我们我们的类模型。
话虽如此,其他球队都使用它(由一个团队一个可怕的尝试创建自己的框架之后)开始。 因此,必须有东西在里面有价值的,因为他们都是比我聪明!
我是一个PHP的家伙。 当我们开始用PHP建设规模较大的应用程序,我开始在PHP世界上研究很多应用程序框架和基本的ORM,然后在Java和.NET。 我也看了一下Java和.NET框架的原因是,不要盲目使用任何PHP框架,而是先了解什么是真正回事,什么样的企业级架构的存在。
因为我没有在一个真实的世界应用程序中使用CSLA,我不能在它的利弊发表评论,但我可以说的是Lhotka是一个罕见的思想家 - 我不是说只是在软件架构领域的专家 - 。 虽然名称领域驱动设计由Eric Evans的-by的方式创造他的书也很大,我谦恭地建议阅读它 - Lhotka是应用领域驱动设计多年。 说了这么多,不管你觉得他的框架,从他在场上的思想深刻的利益。
你可以找到他的dotnetrocks.com/archives.aspx和视频dnrtv.com/archives.aspx(搜索Lhotka)会谈。
@Byron什么是你喜欢的另外两本书?
约翰,
我们的团队从2 CSLA工作至3.5,并发现这是一个伟大的方式来提供一个框架洽因此,所有的开发商都“做同样的方式”。 这是伟大的,最低值码的生成,我们知道当我们运行他们的开箱工作,对所有的CRUD的东西单元测试。 我们发现,我们的TDD其实就是在我们做设计的重构,而里昂证券并不妨碍我们从做任何。
克里斯
我上次尝试VB6的石器时代天使用CSLA。 现在回想起来,本来如果我用代码生成更有效。 如果没有有效的代码生成工具和策略,为他们装配到您的工作流程,他们应该避免像CSLA框架,否则你从CSLA获得功能将无法弥补的时候你花写n行量每个表的代码中,n的每列代码等行
我使用的几个项目CSLA.NET现在,它是在具有丰富的数据绑定compatabilities(asp.net应用程序的不具有)Windows窗体应用程序最全成。
它的主要问题是TDD的支持喜欢的人已经指出,这是因为像为Dataportal_XYZ功能行为的黑盒的,它是无法让我们嘲笑的数据对象。 还有一直在努力解决此问题与此是最好的办法
我想使用它,但我当时的首席开发人员有想法太“神奇”介入......
里昂证券是最好的应用程序框架,它的存在。 洛基LHotka是一个非常,但非常聪明的家伙。 他正在写软件开发像Martin Fowler的,戴维家普拉特的历史,但我最喜欢的作家是罗德·斯蒂芬斯,马修麦当劳杰夫·莱文森thearon威利斯和路易斯·戴维森博士别名SQL。 :-)优点:所有的设计模式应用。 缺点:刻苦学习,和几个样品。