您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 面向对象分析与设计Part 11
CH36架构分析和SAD介绍确定软件架构的意义软件的完整性保障(功能-性能)软件产品的定位,成本控制关键技术问题的定位架构分析和一般步骤什么是架构分析?在满足需求功能的前提下系统的非功能性需求的识别。可靠性、容错性、兼容性。。。性能需求、可扩展性(可伸缩性、对应未来变化)提供满足需求的解决方案。逻辑结构系统结构部署结构架构分析和一般步骤架构分析步骤识别找出会影响到架构的问题多数情况下是非功能性问题(P365的实例)决策寻求解决问题的方案架构的类型和视图多种分类方法UP的架构视图识别和分析架构因素架构因素性能需求、可靠性、容错性、兼容性、扩展性运行环境约束开发成本和生产成本的约束质量场景量化了的质量指标可实现、可测试描述架构因素的UP制品示例:NextGenPOS架构因素表架构因素的解析解决架构需求的方案技术备忘录可选的解决方案根据优先级进行取舍构架设计问题逻辑结构各种范畴的设计模式平台和框架操作系统、数据库运行框架第三方组件和服务实现手段组件服务器运行时编译(JIT)、运行时装配SADUP的架构视图逻辑视图进程视图部署视图数据视图用例视图实现视图SAD文档架构表述----备忘录架构因素----表逻辑视图进程视图部署视图数据视图用例视图CH33使用对象和模式设计更多用例的实现在本地服务上实现故障恢复使用本地高速缓存备忘录上的需求(P379)解决方案:服务工厂的改进本地服务对远程服务的策略本地缓存策略本地的持久化存储产品信息适配器使用了组合模式和适配器模式适配器模式:利用一个适配器解决两种/多种外部对象的不兼容问题。适配器起到了协调、转换的作用。«interface»IProductsAdaptergetSpecification(itemID):ProductSpecificationDBProductsAdaptergetSpecification(itemID)LocalProductsremoteProductsService:IProductAdaptergetSpecification(itemID)BigWebServiceProductsAdaptergetSpecification(itemID)11由IProductSpecifacation实现的本地产品规格服务。它具备适配器和本地服务提供者的两种职责。一个IProductSpecifacation的引用用于访问远程产品服务ProductCatalogproductsService:IProductAdaptergetSpecification()11初始化过程:Store:Registerpc:ProductCatalogcreate()2:create(pc)1:create()«singleton»:ServicesFactorypsa:LocalProductsexternalService:DBProductsAdapter1.1:psa:=getProductsAdapter()IProductsAdapter1.1.2:create(externalService)1.1.1:create()一个外部适配器的引用。以便本地服务在需要时访问外部服务。IProductsAdapterthelocalserviceisreturned协作过程1.2.1:ps:=get(id)1.2.3[notinfile]:put(id,ps)2:makeLineItem(ps,qty)enterItem(id,qty)1:ps:=getSpecification(id)1.1:ps:=get(id)1.3[notinspecs&specsnotfull]:put(id,ps):Register:Sale:ProductCatalog:ProductSpecification:LocalProductsIProductsAdapter1.2[notinspecs]:ps:=getSpecification(id)specsremoteService:DBProductsAdapterIProductsAdapter1.2.2[notinfile]:ps:=getSpecification(id):KeyIndexedFileOfSerializedObjects较好的扩展性外部适配器的变化不会影响到设计与持久化系统的协作缓存数据的更新多线程主动更新pc:ProductCatalog«singleton»:ServicesFactory{active}psa:LocalProductsexternalService:DBProductsAdapterIProductsAdapterinitialize()run()psa:=getProductsAdapter()create()create(externalService)IProductsAdapterA:products:=getProductUpdates()*[forever]//thisactivationison//itsownthread{loopforever:-sleepNminutes-askforproductupdates}Notethatanactiveobjectthatownsathreadhasaverythickline.{active}isoptional,butrecommended.Asanexample,JavaactiveobjectswillimplementRunnable.Notethatthereisoneinterfacelollipopperinterface.Thelow-leveldetailsofcollaborationwiththeThreadobjectarebeingignoredinthediagram.InJava,runtoaThreadorRunnablemaybeconsideredanasynchronousmessage.IntheUML,theseareillustratedwithastickarrowheadratherthanasolidarrowhead.NotethatthisisachangestartinginUML1.4;theyusedtobea(strange)halfarrowhead.Whenmethodsrunonadifferentthread,theUMLsequenceexpressioncanstartwithanameorletterindicatingthethread.Thisisoptional,butitaddsvisualemphasis.AllmessagesrunningontheLocalProductsthreadwillstartwithA,forexample.RunnableUML主动对象的表示双接口:RunnableIProductsAdapter程序设计语言中的线程故障处理错误处理(异常处理)的模式转换异常异常命名集中的错误日志错误会话异常的表示操作说明的表示方法属性+值对的表示方法UML中没有定义专门的异常表达方式;可以采用如下方式表达:异常的处理更多的时候还是和编程语言相关的。«exception»DBUnavailableException():DBProductsAdapterIProductsAdapter:PersistenceFacadeUMLnotation:·Allasynchronousmessages,includingexceptions,areillustratedwithastickarrowhead.·Exceptionsareshownasmessagesindicatedbytheexceptionclassname.·Anoptional«exception»or«signal»stereotypeislegal(anexceptionisakindofsignalintheUML),ifincreasedvisibilityisdesired.ps:=get(...)ps:=getSpecification(id):Objectjava.sql.StatementresultSet:=executeQuery(...)«exception»SQLException()notethedifferencebetweensynchronousandasynchronousmessagearrowheadsintheUMLrecallthatindicatingtheinstanceoftypeObjectisusefulwhenonewantstoindicatetheinterface,butnottheclassofaninstance«exception»ProductInfoUnavailableException()stoppingthemessagelineatthispointindicatesthePersistenceFacadeobjectiscatchingtheexception销售错误处理的交互:DBProductsAdapter:LocalProductsIProductsAdapter:ProductCatalogps:=getSpec(id):RegisterenterItem(id,qty):ProcessSaleFrame«exception»ProductInfoUnavailableException()«singleton»:ErrorDialognotify(message,exception)ps:=getSpec(id)ps:=getSpec(id)continued«singleton»:ErrorDialognotify(message,exception)*:notify(message):Object:ObjectINotifier-GUIdialogbox-textconsoledialog-speechdialog«singleton»:Loglog(exception)IProductsAdapterConvertExceptionpatternErrorDialogpatternCentralizedErrorLoggingpattern通过代理(Proxy)在本地实现故障恢复远程代理使用技术:JAVARMI.NETRemoting原理:本地的桩(stub)—远程对象在本地的代理远程激发由分布式组件平台提供重定向代理(容错代理)当远程服务失效后转向本地服务通过代理(Proxy)在本地实现故障恢复Proxy模式:«interface»ISubjectInterfacefoo()RealSubjectfoo(){...pre-processingrealSubject.foo()...post-processing}Clientsubject:ISubjectInterfacedoBar()1111ProxyrealSubject:ISubjectInterfacefoo(){...whateversubject.foo()...whatever}subjectactuallyreferencesaninstanceofProxy,notRealSubjectrealSubjectwillactuallyreferenceaninstanceofRealSubject几种类似的模式的比较将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。模式Bridge的结构与对象适配器类似,但是Bridge模式的
本文标题:面向对象分析与设计Part 11
链接地址:https://www.777doc.com/doc-3968263 .html