另外,Business Delegate模式如何帮助我?
答案 0 :(得分:1)
我一直在使用struts一段时间,并且通常将所有业务代码放在action类本身中。现在有人对我说这是一个不好的做法
是的。
我应该使用外观和业务委托模式。
我不知道,也许是,也许不,这取决于你的申请。让这个人详细说明他/她的意思。
在业务方面使用Facade为复杂系统(更复杂的对象,对象集,其他内部系统等)提供更简单的访问接口,从而隐藏该系统与系统客户端的复杂性和交互
在演示方面使用业务委托再次隐藏客户端调用的业务组件的复杂性(使用Service Locator管理业务组件的查找,管理网络调用,异常等)。
因此,基本上Facade和业务代表齐头并进,将客户与其使用的业务服务进行更松散的链接。
现在,如果你认为Struts是一个MVC类型的应用程序,我真的不知道Facade和Business Delegate是如何组合在一起的。这就是为什么你应该让这个人详细说明。
在Struts中你有:
所有域逻辑都应该在模型中。 您的Action类不属于Model ,它是Controller的一部分。看那些HttpServletRequest and HttpServletResponse objects on the execute方法?这听起来像域逻辑相关的东西吗?不!
您没有将所有业务规则放在Action类中。在Action类中,您委托到处理域逻辑的类。这通常发生在Service Layer。
服务层与DTO s(通常为POJO s)与外界通信,并不关心其呼叫者类型(HTTP Web应用程序,桌面应用程序等)。 Action类应该将HttpServletRequest参数转换为服务层所期望的正确类型,并为其提供完全控制。当MOdel返回时,它将结果发送到View。
这是一个很好的做法,因为现在可以重用您的服务层及其包含的域逻辑,它不再依赖于某些Web框架(即Struts)。
P.S。一句建议。不要将ActionForm对象用作服务层的DTO。人们认为ActionForms属于Model,但事实并非如此。 ActionForms是Struts的黑羊,它们不是POJO,而是与Struts松散耦合,因为你必须扩展一个struts ActionForm类来使它们工作,这意味着与框架紧密结合。