本人只是一个普通的程序员,从事软件开发工作已有三年了,共在两家公司工作过,但接触的项目都是用动软生成器生成三层架构,数据库实体类model,作为参数在各层之间传递,我也用习惯了。今天突然想自己尝试uml设计,于是对现有项目自己尝试设计下,但在实际应用中发现与model好像有点冲突,想请教大家应该是怎么做的,下面举例下:
场景:市民到社区申请办理一孩生育服务证,需要提交相关材料由计生工作人员审核后录入进系统并生成一孩生育服务证书。群众需要提交的信息包括:个人信息(姓名、身份证号、户籍地、常住地)、配偶信息(姓名、身份证号、户籍地、常住地)、申请材料(结婚证、户口、身份证等),系统需要保存的信息包括:用户信息(个人信息和配偶信息)、申请材料、申请信息(申请人、录入人账号、申请日期)、证书信息(证书编号、发放日期、发放人)。现在要对业务逻辑进行设计,我可能设计成这样:
可能上述设计有不好的地方,先放过它,我主要的困惑的地方是因之前数据库模型封装成Model模型分别是:用户信息表、申请材料表、申请信息表、证书信息表。那么Model如何才两个类中进行传递呢?我就设计成这样:
上图中的字段类型都是一个model类型不是string,那么客户端使用时就可以创建各Model实例,将它赋给相应类的字段,通过类方法再传递给DAL进行数据的保存工作。
页面aspx.cs模拟使用方法:
//创建实体类
用户信息 user=new 用户信息();
User.name=text1.text;
…………………
申请材料 m=new 申请材料();
申请信息 apply=new 申请信息();
Apply.addtime=datetime.now;
………….
证书信息 certificate=new 证书信息();
Certificate.no=34523234234;
………………….
//创建业务逻辑类
市民 a=new 市民();
a. 用户信息= user;
a.申请材料= m;
计生工作人员 b=new 计生工作人员();
b. 申请信息= apply;
b.证书信息= certificate;
a.提交申请(b);
但一看好像不对啊,从对象包含的特性角度来讲计生工作人员就不可能有申请信息和证书信息两个特性,因为这两个应该属于保存数据库后产生的信息也不属于用户的特性,那么我们应该将两个申请信息和证书信息两个model在哪创建出来并最终传递给DAL层呢?是否model与我在设计时思考的方式就是两种不应该存在?本人菜鸟不知道如何是好,我们技术经理是这样告诉我的:“如果你是按照第一张图去设计的,那么model就应该放在各具体实现业务逻辑中去创建不属于特性”,大概意思就是上述的计生工作人员录入方法体中去NEW出申请信息和证书信息并将其用户提交的信息和计生工作人员本身的特性进行赋值,最终将此model传递给DAL层。大家是这样做的吗?如果不对应该是怎么去设计的呢?