面向对象的应用服务层设计(3)
点击次数:27 次 发布日期:2008-11-26 12:32:32 作者:源代码网
|
源代码网推荐 源代码网推荐 应用软件系统,从本质上来说,是计算机对现实世界的模拟。现实世界中的实体对象,在软件系统中,表现为需要处理的数据。在面向对象的系统中,这是通过"类"和"对象"来表示的。 源代码网推荐 源代码网推荐 参考著名的"MVC"模式,类可以分成实体类(M)、控制类(C)、和边界类(V),分别代表了实体对象、控制和界面显示。系统中需要处理的数据,在面向对象的系统中,属于实体类部分。 源代码网推荐 源代码网推荐 在考虑数据实体层的设计策略的时候,需要把握以下要点: 源代码网推荐 源代码网推荐 ◆ 一致的数据表示方式。在一个系统中,数据的表示方式必须尽可能统一,同时,在处理单个数据和多个数据的时候,处理方式尽可能一致。 源代码网推荐 源代码网推荐 ◆ 因为数据通常是需要存储到数据库中,因此,良好的映射方法是必需的。 源代码网推荐 源代码网推荐 ◆ 处理好对象的粒度,即所谓的粗粒度对象、细粒度对象。 源代码网推荐 源代码网推荐 一般例子 源代码网推荐 源代码网推荐 考虑一个现实的例子,一个仓库中的产品(Product),在系统中可以使用如下定义: 源代码网推荐 源代码网推荐 public class Product{public string Name; //名称 源代码网推荐 public decimal Price;//价格 源代码网推荐 public int Count;//数量 源代码网推荐 } 源代码网推荐 可以按照如下方法使用Product类: 源代码网推荐 Product p=new Product(); 源代码网推荐 //……处理Product 源代码网推荐 源代码网推荐 这是一个包含了三个属性的Product类的定义。为了便于说明,在这里,我们尽量将问题简化了。 源代码网推荐 源代码网推荐 又例如,一张入库单可以使用如下定义: 源代码网推荐 源代码网推荐 public class Form{public string ID; //入库单编号 源代码网推荐 public DateTime AddTime; //入库时间 源代码网推荐 public FormDetail[] FormDetails; //入库单明细 源代码网推荐 } 源代码网推荐 public class FormDetail 源代码网推荐 { 源代码网推荐 public Product InProduct; //入库产品 源代码网推荐 public int Count; //入库数量 源代码网推荐 } 源代码网推荐 源代码网推荐 对于处理单个对象,通常采用上述的方法,但是,当我们需要处理相同类的一组对象,也就是处理一个对象集合的时候,就会有一些小小的麻烦。 源代码网推荐 源代码网推荐 如前所述,我们希望在处理单个对象和对象集合的时候,处理的方式尽量统一,这对于软件开发的意义是很大的。常用的处理对象集合的方法有: 源代码网推荐 源代码网推荐 ◆数组表示的方法 源代码网推荐 源代码网推荐 例如,上面的例子中当一张入库单包含多条入库单明细的时候采用的方法。为了灵活性,也可以使用容器来,如Java中的Vector或C#的ArrayList(C#)。只是,在处理对象的时候,需要一个类型转换的操作。这个问题,在支持泛型的语言中不会存在,如使用C++的标准库的容器类。 源代码网推荐 源代码网推荐 ◆ObjectCollection方法。这个方法同上面的方法类似,不同之处在于,为每个实体类设计一个Collection类。例如,可以为FormDetail设计一个FormDetailsCollection类(C#): 源代码网推荐 源代码网推荐 public class FormDetailsCollection: ArrayList 源代码网推荐 { 源代码网推荐 public void Add(FormDetail detail) 源代码网推荐 { 源代码网推荐 base.Add(detail); 源代码网推荐 } 源代码网推荐 public new FormDetail this[int nIndex] 源代码网推荐 { 源代码网推荐 get{ return (FormDetail)base[nIndex]; 源代码网推荐 } 源代码网推荐 } 源代码网推荐 } 源代码网推荐 源代码网推荐 这么做的好处在于,在操作集合中的对象时,不必进行类型转换的操作。 源代码网推荐 源代码网推荐 ◆数据集的表示方法。 源代码网推荐 源代码网推荐 采用这种方法,通常是直接把从数据库查询中获取的数据集(Recordset)作为数据处理对象。这种方法在ASP应用程序中是非常常见的做法。这种做法简单,初学者很容易掌握,但是弊病也很多。 源代码网推荐 源代码网推荐 EJB的方法 源代码网推荐 源代码网推荐 在J2EE体系中,对实体对象的处理的典型方法是Entity Bean。J2EE中使用Entity Bean来表示数据,以及封装数据的持久化储存(同数据库的交互)。由于Entity Bean比较消耗资源,而且采用的是远程调用的方式来访问,因此,在需要传递大量数据,或者在不同的层次之间传递数据的时候,往往还会采用一些诸如"值对象"(Value Object)的设计模式来提升性能。关于J2EE中的设计模式的更多内容,读者可以参考《J2EE核心模式》一书。 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
