You are on page 1of 16

ServiceOrientedArchitectureCaseStudy

Part2BusinessProcessModeling&BusinessServiceAnalysis

Part2BusinessProcessModeling&BusinessServiceAnalysis
1Introduction
This report aims at the study and application of a topdown Service Oriented Architecture (SOA) development approach to the AVERS Supply Chain, which was described in detailintheliteraturereviewofthepreviousassignment. The remainder of this report is structured as follows: The first section describes the core business processes involved in each domain of the Supply Chain i.e. Supply, Manufacturing and Distribution. The following section describes the interactions between the domainsusingtheBPMN2.0Modelingapproach. The next section aims at explaining the identification of the business services that performtheactivities,andprovidesanabstractdesignofeachservicethefunctionalityalong with the respective input and output object. Finally, it describes the consolidation of the services and how SOA principles are applied in order to use all the functionalities in a loosely coupledmannerintheAVERSSupplyChain.

2AVERSSupplyChain:CoreProcesses
As mentioned in the previous assignment, the ANSI/ISA95 is a standard that provides models and terminology for defining the interfaces between an enterprises business system and its manufacturing control systems. In this assignment, ANSI/ISA95sfunctional flow data model presented in Figure 1will be used to define the core processes involved in each domain oftheSupplyChain.

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis

Figure1TheMainManufacturingFunctionsandInformationFlows

ANSI/ISA95 standard defines 12 core functions regarding manufacturing enterprises and further defines for each of those their inherent sub functions. In the previous assignment only 3 of the functions were defined as vital, since the scope of the document was to deal strictly with the order processing and manufacturing domain of AVERS. However, since in this assignmenttherewasachangeinscope,itwillbeneededtoinclude4otherfunctionstocover all3domainsofthesupplychain. Itwasdecidedtoleaveoutofthescopeofthisproject thefollowingfunctions:Quality Assurance; Product Cost Accounting; Maintenance Management; Marketing and Sales; and Research Development and Engineering. It is believed that these are support functions for the coredomainsofthesupplychain,andforthesakeofsimplicityshouldnotbedetailed. The functions which are identified as our core processes are as follows, with its sub processesasdefinedintheStandard: OrderProcessing o Customerorderhandling,acceptanceandconfirmation; o Salesforecasting; o Waiverandreservationhandling; o Grossmarginreporting;

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis o Determiningproductionorders. ProductionScheduling o Determineproductionschedule; o Identifylongtermrawmaterialrequirements; o Determinepackoutscheduleforendproducts; o Determineavailableproductforsales. ProductionControl o Controllingthetransformationofrawmaterialsintoendproductinaccordance withproductionscheduleandproductionstandards; o Performingplantengineeringactivitiesandupdatingofprocessplans; o Issuingrequirementsforrawmaterials; o Producingreportsofperformanceandcosts; o Evaluatingconstraintstocapacityandquality; o Selftestanddiagnosticsofproductionandcontrolequipment; o Creating production standards and instructions for SOPs (standard operating procedures), recipes, and equipment handling for specific processing equipment. MaterialandEnergyControl o Managinginventory,transfers,andqualityofmaterialandenergy; o Generating requests for purchasing of materials and energy based on short andlongtermrequirements; o Calculating and reporting inventory balance and losses of raw material and energyutilization; o Receiving incoming material and energy supplies and requesting quality assurancetests; o Notifyingpurchasingofacceptedmaterialandenergysupplies. Procurement o Placing orders with suppliers for raw materials, supplies, spare parts, tools, equipmentandotherrequiredmaterials; o Monitoringprogressofpurchasesandreportingtorequisitioners; o Releasingincominginvoicesforpaymentafterarrivalandapprovalofgoods; o Collecting and processing of unit requests for raw materials, spare parts, etc., fororderplacementtovendors. ProductInventoryControl o Managinginventoryoffinishedproducts; o Making reservations for specific product in accordance with product selling directives; o Generatingthepackoutendproductinaccordancewithdeliveryschedule; o Reportingoninventorytoproductionscheduling; o Reportingonbalanceandlossestoproductcostaccounting; o Arranging physical loading/shipment of goods in coordination with product shippingadministration. ProductShippingAdministration

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis o Organizing transport for product shipment in accordance with accepted orders requirements; o Negotiatingandplacingorderswithtransportcompanies; o Acceptingfreightitemsonsiteandreleasingmaterialforshipment; o Preparingaccompanyingdocumentsforshipment(BOL,customsclearance); o Confirmingshipmentandreleasingforinvoicingtogeneralaccounting; o Reportingonshippingcoststoproductcostaccounting. Even though it is believed that these processes are all important to the whole AVERS supply chain, they are still too complex due to exaggerated detail on some support processes, such as accounting and energy management. Therefore, for the sake of simplicity, a thorough revision in all sub processes was made, in order to leave only those entirely relevant to the coresupplychaincomprisingall3domains. Notwithstanding, it was decided to group some of the toplevel processes that are closely related to simplify the modeling, such as the grouping of Order Processing and ProductionSchedulinginasinglecoreprocess. Themodifiedcoreprocessesanditsinherentsubprocessesaredefinedasfollows: 1) OrderProcessingandProductionScheduling a. Customerorderhandling,acceptanceandconfirmation; b. Waiverandreservationhandling; c. Determiningproductionorders,scheduleandavailableproductforsales. 2) ProductionControl a. Checkaccordanceofschedulewithproductionscheduleandstandards; b. Performingplantengineeringactivitiesandupdateofprocessplan; c. Issuingrequirementsforrawmaterials; d. Transformationofrawmaterialsintoendproducts. 3) MaterialControlandProcurement a. Managinginventory; b. Managingtransfersofmaterial; c. Placing orders with suppliers for raw materials, supplies, spare parts, tools, equipmentandotherrequiredmaterials; d. Monitoringprogressofpurchasesandreportingtorequisitioners; e. Receivingincomingmaterialsupplies; f. Releasingincominginvoicesforpaymentafterarrivalandapprovalofgoods. 4) ProductinventorycontrolandProductShipmentAdministration a. Managing inventory of finished products; b. Making reservations for specific product in accordance with product selling directives; c. Organizing transport for product shipment in accordance with accepted orders requirements; d. Negotiatingandplacingorderswithtransportcompanies;

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis e. Releasingmaterialforshipment; f. Preparingaccompanyingdocumentsforshipment; g. Confirmingshipmentandperforminvoicing. These processes and sub processes will be further detailed in the next session of this documentinBPMNmodels.

3BPMNModeling
Thissectiondescribesthemodelingofthefourcoreprocessesandtheirsubprocess usingtheBPMN2.0notation.ThetoolusedtomodeltheprocesseswasSignavio. OrderProcessingandProductionScheduling: The file Order_Processing_Production_Scheduling.pdf shows the modeling of this core process. The three subprocesses shown here are displayed in the subsequent pages, with relevant meaningful naming.The Making reservations for specific product in accordance with product selling directives and Raw Material Supply AVERS subprocesses are covered in the MaterialControl&Procurementcoreprocess. ProductionControl: The file Production_Control.pdf shows the modeling of the entire production control process. When a Production Request is received, the system first assures that it has means to fulfill the order, by checking if the production process is well known (existence of product rule) and if it can have enough raw materials. If none of these conditions are met, the order is then rescheduledsothattheseconstraintscanbefurthermet.Iftheconditionsaremet,thesystem verifies if the needed raw materials are already available and allocates it to the production line. If not it requests its movement to the production line before allocation. When the raw material is finallyreserved for production, the system commands the beginning of the order with the allocated resources and,when finished,transfers the products from its temporary storagetothedestinationwarehouse. MaterialControlandProcurement: The file Material_Control_and_Procurement.pdfshows the subprocesses and their respective activitiesthatareperformedbytherawmaterialsupplydepartmentofAVERSOEM,aswellas the interactions with the external material suppliers. There are basically three important entities that the raw material supply processes deal with: the material request orders, the replenishment orders and the material transfer orders. The first correspond the internal requests within AVERS from different departments to the raw material supply department. The second are the purchase orders sent to external material suppliers. Finally, the third are theorderstomovestockfromwarehousestothelocationswhichrequestedthem. ProductinventorycontrolandProductShipmentAdministration: The file Product_inventory_control_and_Product_Shipment_Administration.pdf shows the process model covering shipment details like selecting a logistics carrier, organizing the

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis shipment, etc. Furthermore, inventory activities are modeled like updating the inventory after sendingaproducttoacustomer,sendinganinvoicetothecustomer,etc.

4BusinessServiceAnalysis
In this section, the various business services that perform all the process activities in the previous sections are defined. A business service basically consists of an abstract design specifying the Main Functionality, the input parameters and the output of the functionality. It is designed such that it can be implemented by any IT service. The following illustrates the BusinessServicesdefinedineachofthecoreprocessesoftheAVERSSupplyChain. OrderProcessingandProductionScheduling: OrderManagementServices: RegisterPurchaseOrder INPUT PurchaseOrder

OUTPUT

PurchaseOrder (Registered)

CustomerName CustomerAddress CustomerSSN/TaxNumber CustomerCreditCardNumber(IFindividual) OrderedItem Quantity OrderID(PrimaryKey) CustomerInformation OrderedItem Quantity OrderID(PrimaryKey) CustomerInformation OrderedItem Quantity OrderID(PrimaryKey) Boolean(Accepted/Rejected) CustomerStatus(standard/preferred/individual) OrderID(PrimaryKey) CustomerInformation OrderedItem Quantity OrderID(PrimaryKey) CustomerInformation OrderedItem(s) Quantity OrderID(PrimaryKey) CustomerInformation OrderedItem(s) Quantity OrderID(PrimaryKey)

VerifyPurchaseOrder INPUT PurchaseOrder (Registered)

OUTPUT

VerificationResult

ConsolidateSingleOrder INPUT PurchaseOrder (Verified)

OUTPUT

PurchaseOrder (Consolidated)

CreateBILL INPUT

PurchaseOrder (Consolidated)

OUTPUT

BILL

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis CustomerInformation OrderedItem(s) Quantity Product(s)Price(excludingShippingCost) CustomerRelationshipManagementServices: CheckCustomerType INPUT PurchaseOrder(Registered)

OUTPUT CustomerType CheckCreditWorthiness(IndividualCustomers) INPUT CustomerInformation OUTPUT CreditWorthinessStatus

OrderID(PrimaryKey) CustomerInformation OrderedItem Quantity Standard/PreferredRetailer/Individual CustomerSSN/TaxNumber CustomerCreditCardNumber Boolean(Success/Failure)

ProductionControl: ProductionRequestServices CreateProductionRequest INPUT ProductionRequest Information

OUTPUT

ProductionRequest OrderInformation CreateProductRuleNotFoundAlarm INPUT ProductRequest Information OUTPUT AlarmInformation CreateNotEnoughRawMaterialAlarm INPUT MaterialInformation OUTPUT AlarmInformation RescheduleProductionRequest INPUT ProductionRequest OrderInformation ProductionRuleServices CheckExistenceofProductRule INPUT ProductionRule

ProductTypeID ProductRuleID ProductionLineID Quantity StorageWarehouse ProductionRequestOrderID

ProductRuleID ProductTypeID AlarmID MaterialID Quantity AlarmID ProductionRequestOrderID ErrorType

ProductTypeID

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis Information OUTPUT ProductionRule InformationResponse CheckForSubstituteProductRule INPUT ProductionRule Information OUTPUT SubstituteProduction RuleInformation ProductionLineServices CheckComplianceofProductionLinetoProductRule INPUT ProductionSchedule ProductRuleID Information ProductionRequestOrderID ProductionLineID OUTPUT ProductionLine IsProductionLineReadyforProductRule InformationResponse (Boolean) PrepareProductionLine INPUT ProductionSchedule ProductRuleID Information ProductionRequestOrderID ProductionLineID OUTPUT ProductionLine ProductionLineID InformationResponse ProductionLineResettingID IsProductionLineReady(Boolean) AllocateRawMaterialToProductionLine INPUT ProductionSchedule ProductRuleID Information ProductionRequestOrderID ProductionLineID Quantity OUTPUT MaterialAllocationData[] MaterialID QuantityAllocated LocationID ProductLineID ProductionRequestOrderID ProduceEndProductAccordingToProductRule INPUT ProductionSchedule ProductRuleID Information ProductionRequestOrderID ProductionLineID Quantity OUTPUT ProductionData[] ProductionResponseID ProductionLotID ProductID TemporaryStorageLocationID MoveProducttoInventory INPUT ProductionData ProductionResponseID StorageWarehouse OUTPUT ProductMovement ProductID ProductRuleID IsProductionRuleAvailable(Boolean)

ProductRuleID ProductTypeID SubstituteProductRuleID

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis Data[] OriginLocationID DestinationLocationID ProductionResponseID

RawMaterialServices CheckAvailabilityofRawMaterials INPUT ProductionRule MaterialID Information Quantity OUTPUT ProductionRule IsRawMaterialAvailable(Boolean) InformationResponse RequestTransferofRawMaterialtoProductionLine INPUT MaterialMovement MaterialID RequestData[] Quantity OUTPUT MaterialMovement MaterialID Data[] QuantityMoved OriginLocationID DestinationLocationID MaterialControlandProcurement: InventoryManagementServices CheckInventoryStatus INPUT MaterialInformation OUTPUT InventoryInformation

MaterialID NeededQuantity AmountAvaialbility(Boolean) MaterialData(ID,name,characteristics,etc) StockData(number,location) MaterialID SourceLocation DestinationLocation RequestedQuantity RequisitionerData TransferOrderID MaterialData Quantity SourceLocation DestinationLocation EstimatedDeliveryDateandTime ReplenishmentOrderID MaterialData StorageLocation Quantity MaterialData

CreateTransferMaterialOrder INPUT MaterialTransfer Information

OUTPUT

MaterialTransferOrder Information

StockReceivedMaterial INPUT MaterialInformation

OUTPUT

StockOperation

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis Information QuantityStored StorageLocation OperationSuccessFlag(Boolean)

MaterialRequestServices CreateMaterialRequest INPUT MaterialRequest Information

MaterialID RequisitionerData Quantity DeliveryLocation OUTPUT MaterialRequestOrder RequestOrderID Information RequisitionerData MaterialData Quantity DeliveryLocation CollectMaterialRequestsToReplenishmentOrder INPUT MaterialRequest MaterialID Information RequestedQuantity OUTPUT GroupingReplenishment ReplenishmentOrderID OrderInformation IsReadytoDispatch(Boolean) UpdateMaterialsDeliverySchedule INPUT MaterialDelivery ReplenishmentOrderID ScheduleChange MaterialData Information Quantity DeliveryLocation EstimatedDeliveryDateandTime OUTPUT MaterialDelivery ReplenishmentOrderID ScheduleInformation MaterialData Quantity DeliveryLocation EstimatedDeliveryDateandTime CheckOrderCompliance INPUT ReplenishmentOrderand ReplenishmentOrderID ReceivedMaterial ReceivedMaterialData Information ReceivedQuantity OUTPUT OrderCompliance ReplenishmentOrderID Information MaterialComplianceFlag(Boolean) MaterialQuantityComplianceFlag(Boolean) CheckMaterialSpecificationCompliance INPUT ReplenishmentOrderand ReplenishmentOrderID ReceivedMaterial ReceivedMaterialData Information OUTPUT OrderCompliance ReplenishmentOrderID Information MaterialSpecificationsComplianceFlag (Boolean)

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis SupplierRelationshipServices FindSupplier INPUT

RequestedMaterialand LocationInformation

OUTPUT

SupplierInformation

MaterialData RequisitionerData RequestedDeliveryLocation RequestedQuantity SupplierID SupplierData(name,address,etc.) ReplenishmentOrderID ExpectedPaymentDate PaymentMethod ReplenishmentOrderData InvoiceData

ReleaseReplenishmentOrderInvoice INPUT ReplenishmentOrder Data OUTPUT NotificationServices ReplenishmentOrder Invoice

NotifyRequisitionersMaterialRequestStatus INPUT MaterialRequest RequestOrderID Information OUTPUT NotificationInformation RequestOrderID RequisitionerData RequestOrderStatus NotificationDate NotifyRequisitionersDeliverySchedule INPUT RequestOrder RequestOrderID Information OUTPUT NotificationInformation RequestOrderID DeliveryLocation EstimatedDeliveryDateandTime Quantity NotificationDate NotifyRequisitionersAvailableMaterial INPUT ReplenishmentOrder RequestOrderID Information OUTPUT NotificationInformation RequestOrderID MaterialData StockLocation AvailableQuantity NotificationDate ExternalSupplierServices QuoteMaterialPrice INPUT MaterialInformation

MaterialData RequestedQuantity

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis OUTPUT QuoteInformation RequestedDeliveryDate MaterialData Price PaymentData MaterialData Quantity RequestedDeliveryDate DeliveryLocation AgreedPrice ReplenishmentOrderID MaterialData EstimatedDeliveryDateandTime DeliveryLocation FinalPrice PaymentData ReplenishmentOrderID ReplenishmentOrderID CurrentStatus EstimatedDeliveryDateandTime DeliveryLocation ReplenishmentOrderID PaymentData(date,amount,mean,etc.) ReplenishmentOrderID PaymentConfirmationFlag(Boolean)

PlaceMaterialReplenishmentOrder INPUT RequestedMaterial Information

OUTPUT

ReplenishmentOrder Information

CheckMaterialReplenishmentOrderStatus INPUT ReplenishmentOrder Information OUTPUT ReplenishmentOrder StatusInformation

CheckPaymentConfirmation INPUT ReplenishmentOrder Information OUTPUT PaymentConfirmation Information

ProductinventorycontrolandProductShipmentAdministration: PrepareInventoryResultsforLogisticsProvider INPUT BILL OrderID(PrimaryKey) CustomerInformation OrderedItem(s) Quantity Product(s)Price(excludingShippingCost) OUTPUT ShipmentInformation OrderedItem(s) NumberofItems WarehouseAddress(ShipmentPickup) DeliveryAddress CollectShipmentQuotes INPUT ShipmentInformation OrderID OrderedItem(s) NumberofItems WarehouseAddress(ShipmentPickup) DeliveryAddress

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis OUTPUT ShipmentDetails OrderID Carrier ExpectedShipmentDate ExpectedDeliveryDate Shipmentoption Totalshipmentprice Carrier NumberofItems ExpectedShipmentDate ExpectedDeliveryDate TotalShipmentPrice OrderID(PrimaryKey) Boolean(Approved/Rejected)

Bookselectedroute/carrier INPUT ShipmentDetails

OUTPUT

ApprovalStatus

Informpickupdateforproducts(Notification) INPUT Shipmentorderdetails OrderID ShipmentOrderID ShipmentPickupDate WarehouseAddress(ShipmentPickup) DeliveryAddress InformupdatedShipmentStatus(Notification) INPUT Shipmentorderdetails OrderID ShipmentOrderID Carrier NumberofItems ExpectedShipmentDate ExpectedDeliveryDate ShipmentSelected WarehouseAddress(ShipmentPickup) DeliveryAddress TotalShipmentPrice SendInvoice(Notification) INPUT ShippingOrder OrderID(PrimaryKey) Confirmation Carrier NumberofItems DeliveryAddress ShipmentDate CustomerInformation TotalShipmentPrice OrderedItem(s) Quantity TotalPrice(includingShippingCost)

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis

5ApplicationofSOADesignPrinciples
ThedesignofaSOAsystemisbasedonacleardefinitionanddescriptionofunderlying services, which can then be composed in required ways to execute complete business processes. The Business Services, as we may call them, provide a technical grounding to execute a function, or provide an interface to access a system. The design of these services must be done in such a way that each piece of functionality is modularized properly into a Business Service that can be invoked independently, with the appropriate input parameters. Finer operations that must be executed in a special sequence, or ones that require state to be maintained, must be encapsulated into business functions that can be invoked on their own. ThefollowingisadescriptionofafewdesigndecisionsthathavebeenmadebasedontheSOA designprinciplesasoutlinedintheproblemdescription: High Cohesion: The business services that have been described must be flexible enoughtobeabletobeexecutedinanyorder.Theargumentsitacceptsasinputmust contain all the information required to perform that business service, so that any chaining of information interchanges between services is not necessary. In the Order Management Business Services description, it can be seen that all the business functions accept the Order Id as the main key for performing operations. To get any details about orders, or customers related to that order, the Order Id can be supplied to get the initial information, which can then be used to perform additional operations. Any new application or service bus that needs to interface with these services just needs to know the interface definition and make the corresponding calls. This allows us to have an architecture with a high degree of cohesion. If this is absent, we might have different applications with unstandardized interface definitions, different message formats etc. which reduce interoperability. In such a case, more intermediaries like adapters and message transforming components will have to be added. In some cases, the interface return type definitions can be missing key information that is not retrievable by other ways. We have attempted to keep these issuesinmindwhiledesigningthebusinessservices. Loose Coupling: This is closely related to the principle of High Cohesion. It deals with standardized and selfcontained input and output parameters, which means that any application which has this information can invoke the business service. This means that there is no implied information or shared database which supplies working data that is not passed through the business service interface. At the physical implementation level, it will also mean that there is a common infrastructure for invoking a business function, which allows any service to be invoked seamlessly of its physical implementation details (e.g. CORBA, Web Services). Loose coupling also includes asynchrony in operation. For example, the Ordering process is divided into functions like Customer checks, Quantity retrieval, payment processing etc. Each business service operates on its own, and can execute in parallel with the others. On the level of a single process, all operations that can be done in parallel, such as

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis customer checks and quantity retrieval, can be done in parallel. Execution can move on without waiting for the results of any business function. On a process engine level, components that that have a higher priority and/or larger volume, can be made redundanttobeabletoservicerequestsfrommanyprocessinstancessimultaneously. AppropriateGranularity:Determiningthelevelofgranularityforabusinessfunctionis ofprimeimportance.Choosingalevelofgranularitythatistoofinewillresultinavery largeserviceportfolio.Thiswilltypicallyincludemanyservicesthatareexecutedinthe same orchestration, and hence which belong to the same logical service. It will result in a cluttered SOA design which might complicate the design of the end business processes.Ifthelevelofgranularityistoocoarse,itmightresultinadesignthatmakes it impossible to invoke specific business functions. For e.g., in the order process, if approve shipping details is included in the bill generation function, they will be tied together, and it will be impossible to approve shipping details at a later time, in an asynchronousmanner.Itisimportanttonotethatthebusinessservicesdefinedwillbe furtherdevelopedfrominfrastructuralandcomponentbasedservices,soitwillalways be possible to drill down the business services to finer components. It is not these lower level views of the SOA design that are described here. The granularity of the business functions should also be at an appropriate level so that the business processesthatexecutethemcandoitinadynamicandlucidmanner.

ServiceOrientedArchitectureCaseStudy
Part2BusinessProcessModeling&BusinessServiceAnalysis

6Conclusion
The Business Process Modeling of the AVERS supply chain described in this document showstheimportanceofthetopdownSOAdevelopmentapproach.TheANSI/ISA95standard is used to define the core processes, along with the respective subprocesses in each domain of the Supply Chain. Then, the BPMN 2.0 is used to model the identified processes and sub processes using the Signavio Tool. In the next step, the business services that perform the process activities are designed in an abstract manner, specifying the Main Functionality, the inputparametersandtheoutputofthefunctionality.Thepurposeofsuchanabstractdesignis for the ease of implementation by any IT Service. Finally, it is seen how the design of the businessservicesisconsolidatedbyapplyingthedifferentSOAdesignprinciples.

You might also like