您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 面向对象分析与设计Part 10
CH33逻辑架构的设计模式软件架构软件的整体组织结构;软件元素-〉模块-〉子系统-〉系统。这是一种构架方式。软件的架构可以从多个方面去描述逻辑架构系统的层、包、框架类、类和子系统的组织方式。部署架构系统的进程如何分配到处理单元和网络配置。CH30逻辑架构的设计模式架构模式架构模式大尺度和粗粒度的设计模式。层模式。设计模式有关中小尺度的对象和构架设计。微观架构模式。前面讨论的许多设计模式。外观模式、策略模式…习惯用法面向语言的或者面向实现的设计。实现的技能(为满足性能和效率的)软件的分层设计模式背景软件越来越复杂(参与的开发者越来越多)变化越来越快(业务变化、规模扩大)问题系统的许多部分是高度聚合的,部分的变化会设计整体。应用逻辑和人机界面绑定在一起,代码无法重用。无法将逻辑处理分布到多个计算节点上。通用逻辑与具体应用绑定在一起,重用和分布受到限制。开发者不好确定清晰的界限。难以开发。变更和改进代价高昂。软件的分层设计模式解决方案:分层设计层:软件逻辑上的关系,描述软件元素的组织方式。3层架构、N层架构层之间的关系:低层为高层提供服务,低层并不知道高层的存在低层为更通用的服务,高层为更特定的应用低层高层请求服务分层的软件架构Presentation(AKAInterface,UI,View)Application(AKAWorkflow,Process,Mediation,AppController)Domain(s)(AKABusiness,BusinessServices,Model)TechnicalServices(AKATechnicalInfrastructure,High-levelTechnicalServices)Foundation(AKACoreServices,BaseServices,Low-levelTechnicalServices/Infrastructure)widthimpliesrangeofapplicability·GUIwindows·reports·speechinterface·HTML,XML,XSLT,JSP,Javascript,...·handlespresentationlayerrequests·workflow·sessionstate·window/pagetransitions·consolidation/transformationofdisparatedataforpresentation·handlesapplicationlayerrequests·implementationofdomainrules·domainservices(POS,Inventory)-servicesmaybeusedbyjustoneapplication,butthereisalsothepossibilityofmulti-applicationservices·(relatively)high-leveltechnicalservicesandframeworks·Persistence,Security·low-leveltechnicalservices,utilities,andframeworks·datastructures,threads,math,file,DB,andnetworkI/OmoreappspecificdependencyBusinessInfrastructure(AKALow-levelBusinessServices)·verygenerallow-levelbusinessservicesusedinmanybusinessdomains·CurrencyConverterPOS系统的分层Log4JTechnicalServicesDomainPresentationPricingPricingStrategyFactoryTextProcessSaleConsoleusedinquickexperimentsPersistenceDBFacade«interface»ISalePricingStrategyTaxes«interface»ITaxCalculatorAdapterServicesFactorySalesRegisterSaleSwingProcessSaleFramePaymentsCreditPayment«interface»ICreditAuthorizationServiceAdapterServiceAccessInventory«interface»IInventoryAdapterJessAgeneralpurposethird-partyrulesengine.POSRuleEnginePOSRuleEngineFacadeSOAPnottheJavaSwinglibraries,butourGUIclassesbasedonSwing软件的分层设计模式构架视图的表现描述分层的概念(UML的包)关键性、说明性元素不要描述过于通用的服务(如:字符串处理…)层间、包间耦合与交互POS层间耦合Log4JTechnicalServicesDomainPresentationPricingPersistenceDBFacadeTaxes«interface»ITaxCalculatorAdapterServicesFactorySalesRegisterSaleSwingProcessSaleFramePaymentsCreditPayment«interface»ICreditAuthorizationServiceAdapterServiceAccessInventory«interface»IInventoryAdapterJessPOSRuleEnginePOSRuleEngineFacadeSOAP层间、包间耦合与交互POS层间耦合的简略表示不要试图在一张图上把所有的事情说清楚Log4JTechnicalServicesDomainPresentationJessPersistencePOSRuleEngineInventoryPaymentsServiceAccessPricingSalesTextSwingSOAP层间、包间耦合与交互层间(包间)的交互:交互图表示:Domain::Sales::Register:Cashier:Presentation::Swing::ProcessSaleFrameenterItem(id,qty)«singleton»:Tech-Services::Persistence::Persistence-Facadespec:=getProductSpec(id)x:=isInvalid(lineItem,sale)spec:=getObject(...,id)«singleton»:Domain::POSRule-Engine::POSRule-EngineFacadeenterItem(id,qty)s:Domain::Sales::Sale:Domain::Products::ProductCatalogmakeLineItem(spec,qty)«subsystem»:Tech-Services::JesssomeJessCalls(lineItem,sale)这张图突出显示处理销售时各个包之间的重要消息。表达了逻辑架构的交互关系。这些跨越层边界的消息对于希望了解系统模块之间关系的人非常有用。UML表示法:注意,子系统可以在UML中表示为对象,当我们不想或者没有办法描述它的内部而只想描述它和其他对象的交互时,这种表示很有用。UML表示法:表示包的路径名onPropertyEvent(s,sale.total,total)PropertyListener软件的分层设计模式子系统具有独立处理能力的软件包。相对于简单包来说,子系统具有一定的独立功能和对外部较少的依赖。子系统的UML表示«subsystem»PersistenceDBFacade«subsystem»Jess«subsystem»POSRuleEnginePOSRuleEngineFacadePricingnotasubsystem软件的分层设计模式外观分层和打包并不是仅仅将软件包装在一起。很多时候并不是包中的所有对象都提供给外部访问的。要设计向外部提供服务的外观。(可以使用外观模式)Log4JTechnicalServicesDomainPresentationPersistenceDBFacadeSalesRegisterSaleSwingProcessSaleFrameJessSOAPforapplicationswithonlyafewsystemoperations,perhapsonlyoneobjectactsasthefacadeintothelayerTheTechnicalServiceslayertypicallyexposesmanyinterfaces--atleastonepersubsystem应用层和业务外观会话流程ApplicationDomainPresentationSalesRegisterSaleSwingProcessSaleFrameApplicationsessionfacadeobjectsthatmaintainsessionstateandcontrolworkflowrelatedtosomework--oftenbyusecase.ProcessSaleSessionFacadeProcessRentalSessionFacadeHandleReturnsSessionFacadeProcessRentalFrame...RentalsRental...使用观察者模式实现向上协作低层向上的消息怎么传递?订阅者(上层)—发布者(下层):Domain::Sales::Register:Cashier:Presentation::Swing::ProcessSaleFrameenterItem(id,qty)...enterItem(id,qty)s:Domain::Sales::SalemakeLineItem(spec,qty)CollaborationfromthelowerlayerstothePresentationlayerisusuallyviatheObserver(Publish-Subscribe)pattern.TheSaleobjecthasregisteredsubscribersthatarePropertyListeners.OnehappenstobeaSwingGUIJFrame,buttheSaledoesnotknowthisobjectasaGUIJFrame,butonlyasaPropertyListener.onPropertyEvent(s,sale.total,total)PropertyListener...分层模式的其它问题讨论层间耦合设计观点1:严格按照层次关系观点2:可跨越的关系构架的逻辑视图和进程部署视图逻辑视图和部署视图映射关系依赖于具体的环境(J2EE、.NET、ORACLE…)可分布式的领域层应该当考虑的问题(实现时的考虑,如:串行化问题、统一值类型问题)分层部署分层所带来的弊端效率与性能问题分层不是万能的,有些软件需要考虑其他设计模式。(如:多媒体信息处理的过滤器模式)经典的三层模式信息系统一种部署结构calculatetaxesApplicationLogicInterfacecalculatetaxesApplicationLogicInterface在2个节点上运行的胖客户端的3层模式。在3个节点上运行的瘦客户端的3
本文标题:面向对象分析与设计Part 10
链接地址:https://www.777doc.com/doc-3968261 .html