在RIA应用程序,你应该把尽可能多的业务逻辑(闪存/ Silverlight的等)的RIA层的可能之外。这背后的原因是什么?进入进表示层的任何逻辑得到执行速度更快的利益......业务逻辑不是在表示层
这是因为RIA技术将很可能需要面对电梯向下走,你将不得不重新编写所有的业务逻辑?
在RIA应用程序,你应该把尽可能多的业务逻辑(闪存/ Silverlight的等)的RIA层的可能之外。这背后的原因是什么?进入进表示层的任何逻辑得到执行速度更快的利益......业务逻辑不是在表示层
这是因为RIA技术将很可能需要面对电梯向下走,你将不得不重新编写所有的业务逻辑?
我不知道我同意你的前提,是你“应该”把业务逻辑的客户端之外。您是应该将业务逻辑移到UI层之外,但在您点击后端Web服务之前,通常仍有一些客户端层。例如,一个典型的Silverlight应用程序基于MVVM模型,该模型规定了一个没有业务逻辑的View,一个具有相当好的验证和业务逻辑的ViewModel,以及一个剩下的模型。而这一切都在客户端。
在另一方面,你真的需要一个商业逻辑层的服务器上也是如此。您不能依靠客户端应用程序来过滤掉所有不良数据:有人可能正在运行老版本的客户端,或者完全不同的客户端,或者可能正试图破解您的系统。
换句话说,理想情况下,你应该有你的业务逻辑,并在客户端和服务器上执行验证:在客户端上,因为你需要的响应,并在服务器上,因为你需要的安全性。问题是如何得到这个,并没有任何完美的答案。
Silverlight应用程序中常用的一种方法(我对Flash不太熟悉)是使用WCF RIA服务,它允许您在客户端和服务器上执行的一个地方创建验证。即使您没有使用WCF RIA Services框架,您仍然可以通过链接到客户端和Web服务上的验证/业务逻辑类的源代码获得相同的效果 - 这是更多的工作,但仍然可能比编写验证两次并保持手动同步更少。
前提不是东西放在外部或内部也好,在业务内容层的发明简单和绝对必要的理由 - 共享层之间algorihtms。 – 2013-09-26 09:36:52
所以,一个原因是可维护性。如果客户端已经分布到任何地方,那么当简单的业务规则发生变化时,您不需要重新安装或重新下载。只需将更改部署到后端,您就完成了设置。
它也可以让你做事情喜欢隐藏自己的防火墙后面的数据库。如果您的所有业务逻辑都在前端,那么您可能需要公开数据库,以便可以在客户端上执行业务逻辑。
但我担心,“商业逻辑”是一个重载的术语。什么是“商业逻辑”?正确的架构是最适合您的应用和需求的架构。
正如@Ken史密斯说,你当然应该避免在UI层的业务逻辑。这是为了可测试性,可维护性,可设计性等。但这并不意味着所有事情都进入后端,特别是在具有重要UI规则的RIA应用程序中。在MVVM应用程序(Silverlight)或演示模型应用程序(Flex)中,您将UI BEHAVIOR放置在ViewModel或PresentationModel图层中。然后,将模型中的任何级别的业务逻辑都合理化。这种业务逻辑可能只是一些验证。它可能更多。这取决于你的架构。
业务逻辑是一个横切关注点。
将你的用户是进入的日期?如果是这样,界面需要知道他们是给他们一个选择器的日期,并防止无效输入。甚至可能会限制条目的范围。这是商业逻辑。你怎么能保持它,并仍然有一个有意义的接口?
用户是否会随时进入美国州或省?如果是这样,下拉列表将不得不填充,这意味着UI“知道”外键。
用户可以看到但不能更改的字段吗?为什么或者为什么不?这是商业逻辑。某些用户可以根据特定条件做些什么限制?这是商业逻辑。
这并不意味着UI知道全部业务逻辑,当然,许多数据移动操作与UI无关。
但最终的问题不是如何让BL出了UI的,你不能做到这一点,问题是哪种BL的将在UI。这往往归结为类型,数值范围,允许的操作等等。
因此,无论是用户界面从低层获取所有信息,还是在UI层中复制其中的一些信息。
是一款性能 - 安全 - 可维护性游戏 – gustyaquino 2011-01-19 16:35:27