利用.Net框架开发应用系统 (1)
来源:互联网 发布:怎样找淘宝客 编辑:程序博客网 时间:2024/05/01 11:45
在《开发.Net平台应用系统框架》(下面简称《一》文)中,我介绍我们开发的一个.Net下应用软件系统的框架,在本文,我将介绍我们是怎么在这个框架下开发系统的。前文附带了一个logistics示例工程,这是我们从开发的物流管理系统中精简出来的一个例子,为了便于说明,现在就按照这个简化的工程来具体谈谈各个部分的设计策略和框架的使用,从中也可以管窥整个系统的设计模式。
这个工程主要功能是入库单的入库,以及相应的产品资料维护的辅助功能。因为工程的功能比较一目了然,而本文的主要目的是说明软件的设计策略,因此,对于涉及到需求的Use Case等内容就不会加以论述了。
静态建模部分(数据实体层的设计)
在这个案例中,主要涉及到产品和入库单两个对象,当然,还有一些辅助对象,如入库单的明细等。整个部分的静态模型可以用类图表示如下:
相应的,数据库的设计如下:
对象的粒度
现在,我们要做详细的实体类的设计了,也就是将数据库映射到程序的实体类中。
在考虑实体对象的设计时,“对象的粒度”是一个需要仔细考虑的问题,实体对象按照对象的粒度,通常可以分成所谓的“粗粒度对象”和“细粒度对象”。在J2EE中使用EntityBean为实体类作设计时,我们总是尽量将实体对象建模成粗粒度的对象,因为EntityBean是非常耗费资源的,系统中如果存在大量的细粒度对象,会在很影响系统的性能。而在J2EE中,粗粒度对象的设计也是一个需要一定技巧的工作。
在我们设计的框架中,由于在O-R Map部分充分利用了DataSet的强大功能,使得不论是粗粒度对象,还是细粒度对象,我们都采用了相同的处理方式,在对象粒度的设计方面能够得到一定的简化,对象粒度的粗细也不会对系统性能造成太大的影响。
在这几具体案例中,很明显,对于ProductType和Product的结构比较简单,在对他进行操作时,我们通常只涉及到一张表。虽然,对于Product来说,在对其进行查询的时候,需要知道产品类型的时候,会涉及到ProductType表,但是,在大部分的增加、修改、删除的操作中,我们都只对Product表进行操作,因此,我们把这两个对象都设计成细粒度对象。Product类的XML描述文件如下(删去了Sql语句部分):
这个工程主要功能是入库单的入库,以及相应的产品资料维护的辅助功能。因为工程的功能比较一目了然,而本文的主要目的是说明软件的设计策略,因此,对于涉及到需求的Use Case等内容就不会加以论述了。
在这个案例中,主要涉及到产品和入库单两个对象,当然,还有一些辅助对象,如入库单的明细等。整个部分的静态模型可以用类图表示如下:
相应的,数据库的设计如下:
对象的粒度
现在,我们要做详细的实体类的设计了,也就是将数据库映射到程序的实体类中。
在考虑实体对象的设计时,“对象的粒度”是一个需要仔细考虑的问题,实体对象按照对象的粒度,通常可以分成所谓的“粗粒度对象”和“细粒度对象”。在J2EE中使用EntityBean为实体类作设计时,我们总是尽量将实体对象建模成粗粒度的对象,因为EntityBean是非常耗费资源的,系统中如果存在大量的细粒度对象,会在很影响系统的性能。而在J2EE中,粗粒度对象的设计也是一个需要一定技巧的工作。
在我们设计的框架中,由于在O-R Map部分充分利用了DataSet的强大功能,使得不论是粗粒度对象,还是细粒度对象,我们都采用了相同的处理方式,在对象粒度的设计方面能够得到一定的简化,对象粒度的粗细也不会对系统性能造成太大的影响。
在这几具体案例中,很明显,对于ProductType和Product的结构比较简单,在对他进行操作时,我们通常只涉及到一张表。虽然,对于Product来说,在对其进行查询的时候,需要知道产品类型的时候,会涉及到ProductType表,但是,在大部分的增加、修改、删除的操作中,我们都只对Product表进行操作,因此,我们把这两个对象都设计成细粒度对象。Product类的XML描述文件如下(删去了Sql语句部分):
Product.xml<?xml version="1.0" encoding="gb2312" ?><Entity> <EntityTypeName>Product</EntityTypeName> <TableName>Product</TableName> <Columns> <Column Name="ProductID" DataType="System.String" IsKey="true"></Column> <Column Name="ProductName" DataType="System.String" IsKey="false"></Column> <Column Name="ProductTypeID" DataType="System.String" IsKey="false"></Column> <Column Name="CurrentCount" DataType="System.Decimal" IsKey="false"></Column> <Column Name="UnitName" DataType="System.String" IsKey="false"></Column> </Columns> <RefTable Type="Parent"> <TableName>ProductType</TableName> <ForeignKey>ProductTypeID</ForeignKey> <PrimaryKey>ProductTypeID</PrimaryKey> <Columns> <Column Name="ProductTypeID" DataType="System.String" IsKey="true"></Column> <Column Name="ProductTypeName" DataType="System.String" IsKey="false"></Column> </Columns> </RefTable></Entity>
- 利用.Net框架开发应用系统 (1)
- 利用.Net框架开发应用系统
- 利用.Net框架开发应用系统 (2)
- 利用.Net框架开发应用系统 (3)
- 利用.Net框架开发应用系统 (4)
- 实战揭秘:开发.Net平台应用系统框架 (1)
- 实战揭秘:开发.Net平台应用系统框架 (2)
- 实战揭秘:开发.Net平台应用系统框架 (3)
- 实战揭秘:开发.Net平台应用系统框架 (4)
- 开发.Net平台应用系统框架
- 开发.Net平台应用系统框架
- 开发.Net平台应用系统框架
- 开发.Net平台应用系统框架--实践
- 开发.Net平台应用系统框架
- 开发.Net平台应用系统框架zz
- Smobiler基于.NET框架开发移动应用内部系统(开发日志一)
- Smobiler基于.NET框架开发移动应用内部系统(开发日志二)
- Smobiler基于.NET框架开发移动应用内部系统(开发日志三)
- 警告:为了安全请不要随意将ASP.Net的validateRequest="false"
- C/C++笔试、面试题目大汇总
- javascript函数库--1
- JFreeChart技术总结(一)
- 八卦歌诀
- 利用.Net框架开发应用系统 (1)
- (Reflection)认识反射(反射实例化,反射评价,在工厂三层架构应用)
- 客户/服务器三层架构
- 利用.Net框架开发应用系统 (2)
- 一招解决本地DNS缓存故障
- C++捷径之四
- JSF中使用Tiles
- Oracle在Linux下地安装小结
- 利用.Net框架开发应用系统 (3)