您好,欢迎访问三七文档
使用GRASP模式实现Use-CaseNEXTGENPOS系统NextGen销售终端(point-of-sale,POS)系统POS系统是用来记录销售信息和处理支付的计算机系统,它一般用于零售店体系结构InterfaceSalePaymentLogPersistenceFacadeapplicationlogicanddomainobjectlayertechnicalserviceslayerminorfocusotherlayersprimaryfocusofcasestudyexplorehowtodesignobjectssecondaryfocusexplorehowtodesignobjects目标设计用例的实现运用GRASP模式给类分配责任使用UML交互图标记来表示对象设计责任的分配和协作的设计是非常重要的,并且是设计、画图或者编程中具有创新性的步骤用例实现用例实现描述了一个特定的用例在设计模型中是如何通过协作的对象来实现的.设计者能够描述用例的一个或多个场景的设计,其中的每个设计都称为用例实现(场景实现)UML交互图是一种表示用例实现的通用的语言:SystementerItem(id,quantity)endSale()makePayment(amount)ProcessSale1.Customerarrives...2.Cashiermakesnewsale.3.Cashierentersitemidentifier.4....UseCasesSystemSequenceDiagramsOperation:enterItemPost-conditions:-ASalesLineIteminstancesliwascreated-...Operation:makeNewSalePost-conditions:-...ContractsmakeNewSale():CashierSaledate...SalesLineItemquantity1..*1......domainobjectssystemeventssystemoperationsthedomainobjects,attributes,andassociationsthatundergostatechangesDomainModelUse-CaseModelsomeideasandinspirationforthepost-conditionsderivefromtheusecasesDesignModel:RegisterenterItem(itemID,quantity):ProductCatalogspec:=getSpecification(itemID)addLineItem(spec,quantity):Sale...inadditiontotheusecases,requirementsthatmustbesatisfiedbythedesignofthesoftwareuse-caserealizationconceptualclassesinthedomaininspirethenamesofsomesoftwareclassesinthedesignmakeNewSale()create()endSale()......SampleUPArtifactRelationshipsforUse-CaseRealization协作图SSD、系统操作、交互图和用力实现用例指出了SSD中所示的系统操作系统操作可以成为输入到领域曾交互图的控制器中的起始消息领域层交互图阐述了对象如何交互以完成所需任务——用例实现:RegisterenterItem():RegisterendSale():RegistermakePayment()1:???()1:???()1:???():RegistermakeNewSale()1:???()顺序图:RegisterenterItem(itemID,quantity):ProductCatalogspec:=getProductSpec(itemID)addLineItem(spec,quantity):Sale...makeNewSale()create()endSale()...makePayment(...)...or:Register:SalemakeNewSale()create():RegisterenterItem(itemID,quantity):ProductCatalogspec:=getProductSpec(itemID)addLineItem(spec,quantity):Sale...事件流和用例实现有可能直接从用例的文字中设计用例实现对某些系统操作而言,契约可以用于增加描述细节例:enterItemOperation:enterItem(ItemID:ItemID,quantity:integer)CrossReferences:UseCases:ProcessSalePreconditions:ThereisasaleunderwayPostconditions:-ASalesLineIteminstancesliwascreated(instancecreation)1:makeLineItem(...)enterItem(id,qty)1.1:create(...):Register:Sale:SalesLineItemSatisfythestatechangeofSalesLineIteminstancecreation领域模型和用例实现选择合适的责任分配依赖于领域模型但是用例实现可能引起领域模型的修改概念vs.设计类领域模型可以用以启发我们在设计模型中定义软件类并据此命名PaymentamountSaledatetimePays-forPaymentamount:MoneygetBalance():MoneySaledate:DatestartTime:TimegetTotal():Money...Pays-forUPDomainModelStakeholder'sviewofthenoteworthyconceptsinthedomain.UPDesignModelTheobjectdeveloperhastakeninspirationfromthereal-worlddomainincreatingsoftwareclasses.Therefore,therepresentationalgapbetweenhowstakeholdersconceivethedomain,anditsrepresentationinsoftware,hasbeenlowered.1111inspiresobjectsandnamesinconceptualclassesdesignclasses迭代的Use-Case实现对象设计:makeNewSalemakeNewSale系统操作发生于当收银员在顾客到达后有东西要买,开始一笔新的买卖时ContractCO1:makeNewSaleOperation:makeNewSale()CrossReferences:UseCases:ProcessSalePreconditions:nonePostconditions:-ASaleinstanceswascreated(instancecreation)-swasassociatedwiththeRegister(associationformed)-Attributesofswereinitialized选择一个控制类依据控制者模式,下面是一些选择项:代表整个“系统”,设备或子系统Register,POSSystem代表一个用例场景中系统事件的接收者或者处理者ProcessSaleHandlerProcessSaleSessionFaçadeControllerUseCaseController在设计模型中,该Register是一个软件对象。它不是一个真实的物理的收银台,而是一种软件抽象,选择这个名字可以减少领域和软件概念之间的表示鸿沟.在这个案例中,由于只有少数系统操作,Register足够了:RegistermakeNewSale()byController创建新Sale软件对象Sale必须被创建:Creator模式谁来创建它呢?Register:创建它,然后与之关联当Sale创建后,它必须创建一个空的集合,以记录所有的将来要被添加的SalesLineItem实例:RegistermakeNewSale():Salecreate()RegistercreatesaSalebyCreatorcreate():SalesLineItembyCreator,Salecreatesanemptymultiobject(suchasaList)whichwilleventuallyholdSalesLineIteminstancesCAUTION:ThisisnotaSalesLineIteminstance.Thisisacollectionobject(suchasaList)thatcanholdSalesLineitemobjects.byCreatorandControllerthisactivationisimpliedtobewithintheconstructoroftheSaleinstance对象设计:enterItementerItem系统操作发生于当收银员输入一个购买商品的itemID和(可选)数量.ContractCO2:enterItemOperation:enterItem(itemID:ItemID,quantity:integer)CrossReferences:UseCases:ProcessSalePreconditions:Thereisanunderwaysale.Postconditions:-ASalesLineIteminstancesliwascreated(instancecreation)-sliwasassociatedwiththecurrentSale(associationformed)-sli.quantitybecamequantity(attributemodification)-sliwasassociatedwithaProductSpecification,basedonitemIDmatch(associationformed)选择控制类系统操作消息enterItem的责任的处理如同makeNewSale一样,采用Controller模式继续使用Register作为控制器显示商品描述和价格使用的设计原则被称为模型-视图分离原则(Model-ViewSeparation),即显示任务不应该是非GUI对象的责任尽管用例说明了在操作后描述和价格将被显示,但是设计中在此时将忽略此情况创建一个新的SalesLineItementerItem契约的后置条件:显示创建,初始化和与SalesLineItem的关联在领域模型中,Sale包含了SaleLineItem对象.因而,软件Sale也类似地包含软件SalesLineItem.通过Creator模式,软件Sale是创建SalesLineItem的备选对象.创建一个新的SalesLineItem通过将新的实例存放在商品条目集合中,Sale可以与新创建的SalesLineItem关联.后置条件表明,当创建SalesLineItem时,需要一个数量值,所以,Register需要将此值传递给Sale,Sale必须将此值作为create消息的一个参数.寻找ProductSpecificationSalesLineItem要与匹配进入的itemID的ProductSpecification建立关
本文标题:GRASP实例
链接地址:https://www.777doc.com/doc-7385258 .html