我正在寻找一个完整的网站(基于CSLA 4.0的MVC或WebForm示例应用程序。任何想法?我认为它的ProjectTracker示例仅仅是WinForm并基于CSLA的旧版本。
答案 0 :(得分:6)
Mark对CSLA的体验似乎已经过时了。几乎他提出的每一点都是不准确的。 CSLA用于用户的用例场景。特别是与UI的数据绑定。
1)使用文件夹类比是完全不合适的。如果您愿意,可以将单个业务对象同时充当父项和子项,而不是业务对象的同一实例。也完全支持延迟加载儿童。
2)序列化开销不过是RIA服务所做的,因为CSLA使用DataContractSerializer来完全序列化对象。此外,MobileFormatter已更新为允许自定义序列化程序。现在支持二进制文件以及原始xml。最终它仍然通过DataConstractSerializer。
3)您可以创建任何类型的DataPortal替换,包括在您自己的自定义DataPortal中使用JSON。 CSLA命令对象支持托管属性,因此序列化的工作方式与业务对象完全相同。
4)确实没有就地合并,但是,我从来没有发现这是一个问题。
5)订阅者永远不会使用业务对象进行序列化。如果您的DataPortal只是本地的,那么原始对象就会被发送(而非序列化),因此它所拥有的任何订阅者自然会被附加。
在Windows窗体和Silverlight环境中利用CSLA没有问题。对于95%的业务用户用例,CSLA带来了很多好处。
答案 1 :(得分:2)
http://www.lhotka.net/cslacvs/viewvc.cgi/core/trunk/Samples/NET/cs/ProjectTracker/Mvc3UI/是着名的CSLA ProjectTracker示例的MVC3部分。这可能是 一个可以借鉴的。
Rocky本人在2天前检查了一次变化,所以这可能是最前沿的 你可以从作者那里得到一份CSLA样本。
以下是从svn
中提取代码的说明答案 2 :(得分:0)
我的建议 - 不要使用CSLA。我将引用我对https://stackoverflow.com/questions/1234/have-you-attended-the-csla-master-class的回复:
我有两年的CSLA经验。事实上,当我开始我们的时候 项目我真的不想写一个实体框架 划伤,这是我之前所有工作中完成的事情。
所以,我选择了CSLA。作为任何实体框架,它有好有坏 点。我会列出一些不好的,因为好的是 在CSLA相关网站上大量描述。所以,nays:
- CSLA父子关系不支持文件夹文件模式,其中文件是父文件夹的子文件,但它们是 也是独立的实体。在CSLA,儿童是儿童不可分割的一部分 父,所以你不能,例如,更新/删除/添加一个孩子 没有更新整个对象树。忘记延迟装载 孩子 - 没有这样的事情。简而言之,如果您的数据模型代表了一个 文件夹文件结构 - 不要使用CSLA。我们不得不扭曲CSLA 让它支持这种模式。
- 国家方面的巨额开销。使用3个属性定义业务对象。现在使用一些http绑定通过线路发送它。工资 注意传播的内容。我知道XML并不是最好的 序列化车辆,但您的3个属性被翻译为~4KB XML。它包括什么?业务规则和现场数据管理器状态 等等。非常臃肿。我们采用zip压缩,但仍然 这非常令人不安。
- Silverlight没有正常的序列化引擎,所以CSLA附带了一个Mobile序列化,如果什么也没有,这很好 其他。问题是还有其他的东西--JSON和协议 缓冲区,但CSLA与这些技术不兼容。和移动 序列化,虽然它解决了这个问题,但是真的很痛苦 它涉及命令,因为你必须手动实现它 (与业务对象不同,它为每个对象自动支持它 管理财产)。还记得10年前MFC的CArchive吗?这是 它。
- 保存对象不会就地合并新状态,而是返回一个新对象。我们在Silverlight中遇到了很多问题 事实上,每个保存都会替换对象树。所以,我们不得不重写 CSLA默认行为并实现就地保存所有 将新状态与旧状态合并的相关复杂性。
- 您很快就无法控制电线上实际传输的内容。例如,这是我在检查时发现的东西 CSLA源代码。序列化业务对象也是序列化的 PropertyChanged和的所有可序列化订阅者 PropertyChanging事件。所以,当这样的对象被发送到 服务器,它携带所有可序列化的订阅者 这些事件。从移动对象的理念来看,这很好 - 移动 对象只是在整个应用程序中保留其生存环境 层。从实际的角度来看,我发现这是一场灾难等待 即将发生。不用说我已经禁用了此功能 当场。
- 回顾在与CSLA合作2年后,我得出结论,许多其他人已经来过 - 你的服务器端 对象与客户端不一样。试图假装他们 在开发后期会产生很多悲伤。这是 可能是CSLA最重要的事情。移动对象的概念 一开始似乎是正确的,但随着项目的发展和服务器的增长 客户端开发在服务器上具有相同的对象类型 客户变得更多的是负债而不是优势 - 互联网上充满了关于此事的讨论。
底线 - 如果我有相同的话,我就不会使用CSLA 当我开始这个项目时,就像我现在所做的那样理解。 CSLA为您提供了很多东西,我喜欢DataPortal概念 非常,但我发现如果没有他们,我本可以做得很好 现在在一个更好的地方。
这是我的2美分。