面向构件化软件开发
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/* parse address form and generate a ContactInfo object */ private ContactInfo extractContactInfo(HttpServletRequest request, String suffix) throws HTMLActionException { ArrayList missingFields = null; String familyName = request.getParameter("family_name" +suffix).trim(); if (familyName.equals("")) { if (missingFields == null) { missingFields = new ArrayList(); } missingFields.add("Last Name"); } String givenName = request.getParameter("given_name" +suffix).trim(); if (givenName.equals("")) { if (missingFields == null) { missingFields = new ArrayList(); } missingFields.add("First Name"); } String address1 = request.getParameter("address_1" +suffix).trim(); if (address1.equals("")){ if (missingFields == null) { missingFields = new ArrayList(); } missingFields.add("Street Address"); } String address2 = request.getParameter("address_2" +suffix).trim(); if (address2.equals("")) { address2 = null; } String city = request.getParameter("city" +suffix).trim(); if (city.equals("")){ if (missingFields == null) { missingFields = new ArrayList(); } missingFields.add("City"); } String stateOrProvince = request.getParameter("state_or_province" +suffix).trim(); if (stateOrProvince.equals("")) { if (missingFields == null) { missingFields = new ArrayList(); } missingFields.add("State or Province" +suffix); } String postalCode = request.getParameter("postal_code" +suffix).trim(); if (postalCode.equals("")){
百度文库向构件的 应用软件平台
EAI
Tuxedo J2EE
CORBA
软件和知识表达
面向构件 While {} 高级语言 GOTO 23 汇编语言 0101 机器语言 0101 机器语言 GOTO 23 汇编语言 0101 机器语言 While {} 高级语言 GOTO 23 汇编语言 0101 机器语言
互联网!
政策法规!流程重组! 互联网!
业务拓展! 机构重组!
什么是软件构件?
• • • • • • • • 构件的中心是建筑师 构件不能脱离业务范畴存在 构件不能对应到技术层的概念 构件有多个层次 可封装高密度的、高复杂度的业务逻辑 可被重复使用 可以适应具体化要求 可以组合为更大的构件
构件定义
提供接口
构件名
依赖接口
构件类型
构件复用
EOS构件接口依赖关系
自依赖
提供接口 构件名
依赖关系
依赖接口
流程构件
提供接口
构件名
依赖接口
提供接口
构件名
依赖接口
提供接口
构件名
依赖接口
展现构件
业务构件
运算构件
提供接口
构件名
依赖接口
提供接口
构件名
依赖接口
页面构件
数据构件
传统构件接口方式-接口异常复杂
提供接口 构件名 依赖接口 提供接口 构件名 依赖接口 提供接口 构件名 依赖接口 构件类型 构件类型
面向构件是产业成熟的标志
裁缝、木匠、号码、组合家具
• • • • 裁缝是量身订制的艺术家 号码是人体身材的标准化 木匠是因才施用的艺术家 组合家具是需求的产业化
科学、技术、工程
• 科学:
– NP-Complete问题
• 技术:
– 1997年深蓝计算机战胜卡斯帕罗夫
• 工程
– 互联网时代
高科技为什么低回报
面向构件是下一代的中间件
面向构件 EAI/SOA J2EE CORBA
美国应用软件的沿革路径
基于集成应用系统 基于中间件应用系统
员 工 CRM 客 户 ERP 主 管 OA 伙 伴 EC
基于C/S应用系统
CRM CRM ERP ERP OA OA
EAI/SOA J2EE DB/OS
ERP DB/OS
+
+
+ + + + + +
业务
+ + + + + +
服务
+
+ +
+
+ +
+ +
对象 数据
+
页面 展现
public final class OrderHTMLAction extends HTMLActionSupport {
public class OrderEJBAction extends EJBActionSupport { public EventResponse perform(Event e) throws EventException { OrderEvent oe = (OrderEvent)e; PurchaseOrder purchaseOrder = new PurchaseOrder(); ContactInfo billTo = oe.getBillTo(); ContactInfo shipTo = oe.getShipTo(); CreditCard creditCard = oe.getCreditCard(); String orderIdString = null; // get the UniqueIdGenerator EJB UniqueIdGeneratorLocal uidgen = null; try { ServiceLocator sl = new ServiceLocator(); UniqueIdGeneratorLocalHome home = (UniqueIdGeneratorLocalHome)sl.getLocalHome(JNDINames.UIDG_EJBHOME); uidgen = home.create(); } catch (javax.ejb.CreateException cx) { cx.printStackTrace(); } catch (ServiceLocatorException slx) { slx.printStackTrace(); } orderIdString = uidgen.getUniqueId("1001"); // get ther userId ShoppingClientFacadeLocal scf = null; scf = (ShoppingClientFacadeLocal)machine.getAttribute(PetstoreKeys.SHOPPING_CLIENT_FACADE) ; String userId = scf.getUserId(); purchaseOrder.setOrderId(orderIdString); purchaseOrder.setUserId(userId); purchaseOrder.setEmailId(billTo.getEmail()); purchaseOrder.setOrderDate(new Date()); purchaseOrder.setShippingInfo(shipTo); purchaseOrder.setBillingInfo(billTo); purchaseOrder.setCreditCard(creditCard); int lineItemCount = 0; float totalCost = 0; // Add the items from the shopping cart ShoppingCartLocal cart = scf.getShoppingCart(); Locale locale = (Locale)machine.getAttribute(PetstoreKeys.LOCALE); purchaseOrder.setLocale(locale); Collection items = cart.getItems(); // if the cart is empty throw an exception saying so if (items.size() == 0) { throw new ShoppingCartEmptyOrderException("Shopping cart is empty"); } Iterator it = items.iterator(); while (it.hasNext()) { CartItem item = (CartItem)it.next();
• • • • 软件产品化成为神话 技术变化太快 需求变化太快 覆盖的面太宽
软件工程的银弹
构件集成
二次开发
开盒即用
客户/ 服务器 单机 单一事务 部门
互联网
全企业
面向构件的产业化价值
降低生产成本
适应需求变化
快速推出稳定新产品
降低提交安装维护成本
面向构件的应用软件体系
中国电信二期-综合客服
OA
J2EE DB/OS
中国应用软件的沿革路径
新型面向构件应用系统
员 客 主 伙
工 C R M
户 E R P
管 O A
伴 E C
面向构件
EAI/SOA J2EE DB/OS
中间件体系
应用系统 面向领域的专用平台
面向构件的业务模块 面向构件的中间件平台 基 础 中 间 件 平台
操作系统及数据库
中间件平台
内容 流程定义 规则 报表 权限
开发 开 发 环 调试 境
基础构件库 页面 流程 业务 数据模型 J2EE BPML/ .Net Portal Workflow Corba MSQ 方法 数据
运 部署 行 环 管理 境
Java C#
Data DI
面向构件的中间件的特征
COA SOA EAI Portal J2EE CORBA COM+
构件类型
提供接口
构件名
依赖接口
提供接口
构件名
依赖接口
构件类型
构件类型
提供接口
构件名
依赖接口
提供接口
构件名
依赖接口
构件类型
public Event perform(HttpServletRequest request) throws HTMLActionException { // Extract attributes we will need // XXXX this needs to be part of the form ContactInfo shipper = extractContactInfo(request, "_a"); ContactInfo receiver = extractContactInfo(request, "_b"); CreditCard creditCard = new CreditCard( "1234-2334", "Duke Express", "10/2001") ; return new OrderEvent(shipper,receiver,creditCard); }