这是本人最近开始作的一个项目,采用.net技术。

原创 2004年09月03日 16:53:00

?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

?

程序开发指南
(初版)

?

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

1.???? 概要

2.???? 系统物理结构图

3.???? 系统架构图

4.??? 表示层部分的开发
4.1概述
4.2
开发

4.2.1 Web Service的使用

4.2.2画面组件的使用

1.DataGrid控件的使用

2文本框控件的使用

3.DataGrid控件的使用

4.2.3画面中显示Message的使用

4.2.4画面中Log的使用

4.2.5画面中状态的保存

4.2.6画面之间数据的传送

5.???? Business层部分的开发

5.1概述

5.2开发

6.???? Dao层的开发

6.1概述

6.2开发

6.2.1继承

6.2.2调用

6.2.3单表操作的便利

6.2.4Message的使用

6.2.5Log的使用

6.2.5异常处理
7.共同部分

8.程序测试

9.工程结构

?

1.?? 概要

此文档为开发用文档,希望开发人员通过本文档能够熟悉整个项目的Framework,并且能够在Framework上进行规范,高效的开发。

?

2.??? 系统物理结构图

?

3.??? 系统架构图

?

4.?? 表示层部分的开发
4.1
概述
表示层主要由Windows Form组成,复杂部分在于有DataGrid的画面,处理起来相对要繁琐一些。下图是表示层的目录结构图。


下图是表示层的类图。

?

4.2开发
4.2.1
Web Service的使用

引用的Web Service

名称
chuou.service.login;

chuou.service.initial;
chuou.service.masuta

chuou.service.hattyuu

URL

http://localhost/CHUOU_Service/src/chuou/service/init/InitialService.asmx;
http://localhost/CHUOU_Service/src/chuou/service/login/LoginService.asmx;
http://localhost/CHUOU_Service/src/chuou/service/masuta/MasutaService.asmx

http://localhost/CHUOU_Service/src/chuou/service/masuta/HattyuuService.asmx

?

(注意 前两个WebService不可以手工更新)

程序例子如下

private MasutaService masutaService = null;

……

private void form_2_17_Load(object sender, System.EventArgs e)

{

……

masutaService=MainFrame.masutaService;

……

|

private void btnKensaku_Click(object sender, System.EventArgs e)

{??????

……

DataSet ds=masutaService.doSearch_form2_17(null);??????????????????

……

}

4.2.2画面组件的使用
1.
DataGrid控件的使用

所有画面中的DataGrid使用chuou.common.view.component.SuperGrid组件。

程序例子如下

private SuperGrid extendedDataGrid1;
this.extendedDataGrid1 = new SuperGrid();

2文本框控件的使用

所有画面中的文本框(包括自定义控件里面)使用chuou.common.view.component. SuperTextBox组件。

程序例子如下

private SuperTextBox txtModelName;

this.txtModelName = new SuperTextBox(Mask.Digit);

//类型控制

?public enum Mask

{

??????? None,//不做任何处理

??????? DateOnly,//日期型

??????? Decimal,//数值型

??????? Digit//数字型

};

//IME输入法控制
public enum ImeMask

{

??????? None, //不做任何处理

??????? Off, //IME关闭

??????? On//IME打开????

}
//执行回车键的操作
public delegate void enterKeyDown();

4.2.3画面中显示Message的使用

?? 考虑到程序开发的便利和修改的方便,使用chuou.common.view.message.AppMessage类。

程序例子如下

AppMessage.Show(this,"E1001");

"E1001"Message的编号。

4.2.4画面中Log的使用

?? 为了方便以后的调试,每个方法,关键的处理都要求写log

程序例子如下

using chuou.common.log;

……
ILog log=ClientLog.getInstance().GetLogger(typeof(Form_2_2));

……

log.Info("step into the Form2_Load");

log的输出位置默认为 c:/ chuou.log

4.2.5画面中状态的保存

?? 考虑到开发上的便利性,画面中的状态保存在文件中,处理流程为先定义一个对象,把画面中要保存的数据放到对象中去,然后将此对象序列化到文件中去,到了要读取画面状态的时候,再从此文件中反序列化出对象来,具体实现由chuou.common.util.ObjectSave类来实现。
程序例子如下
第一步,先定义一个对象类。
using System;

using System.Runtime.Serialization;

namespace chuou.view.hattyuu.view.save

{

??????? [Serializable]

??????? public class Form_3_2_1Save

??????? {

??????? public Form_3_2_1Save(){??????? }

??????? private bool _chkZenka;

??????? private bool _chkSetsu1;

??????? private bool _chkSetsu2;

??????? public bool chkZenka

??????? {

??????????????? get { return this._chkZenka; }

??????????????? set { this._chkZenka = value; }

??????? }

??????? public bool chkSetsu1

??????? {

??????????????? get { return this._chkSetsu1; }

??????????????? set { this._chkSetsu1 = value; }

??????? }

??????? public bool chkSetsu2

??????? {

??????????????? get { return this._chkSetsu2; }

??????????????? set { this._chkSetsu2 = value; }

??????? }}
注意? 必须要添加Serializable属性。

第二步,写对象到文件中。
Form_3_2_1Save save=new Form_3_2_1Save();

save.chkSetsu1=chkSetsu1.Checked;??????????????

save.chkZenka=chkZenka.Checked;

ObjectSave.putObject(this.GetType(),save);?????????????

this.Close();??

第三步,读文件到对象中。

Form_3_2_1Save obj= ObjectSave.getObject(this.GetType()) as Form_3_2_1Save;???????????? if(obj!=null){

??????????????? chkZenka.Checked=obj.chkZenka;

??????????????? chkSetsu1.Checked=obj.chkSetsu1;??????????????????????????????????????? }

4.2.6画面之间数据的传送

??????? 开发时候,涉及到画面之间传送数据的时候,都要按照此规范来调用。

开发共分三步

第一步,先要定义一个本画面需要接受的数据模型,命名空间为
namespace chuou.view.*.view.trans,名称为Form_*_*Trans.cs,参考如下
namespace chuou.view.hattyuu.view.trans

{

public class Form_3_2_12Trans :ITrans{

??????? public Form_3_2_12Trans(string strOldSaiBan) {

??????????????? _strOldSaiBan=strOldSaiBan; }

??????? private string _strOldSaiBan;

??????? public string StrOldSaiBan{

??????????????? get {return _strOldSaiBan;} }

??????? public bool check(){

??????????????? if(StrOldSaiBan==null || StrOldSaiBan.Trim().Length==0){

??????????????????????? return false; }

??????????????????????? return true; }} }

注意? 必须实现Itrans接口。
第二步,存放数据,参考如下

private void btnSeibanIkkatsuHenkou_Click(object sender, System.EventArgs e)

{

??????? Form_3_2_12Trans trans=new Form_3_2_12Trans("test");

??????? ObjectTrans.putTransObject(typeof(Form_3_2_12),trans);

??????? Form_3_2_12 form = new Form_3_2_12();

??????? form.Show();

}

第三步,读取数据,参考如下

private void form_3_2_12_Load(object sender, System.EventArgs e)

{

Form_3_2_12Trans trans= ObjectTrans.getTransObject(typeof(Form_3_2_12)) as Form_3_2_12Trans;

??????????????? Console.WriteLine("trans value="+trans.StrOldSaiBan);

}

Business层部分的开发
5.1概述
这层主要是写 *Service.asmx.cs文件,按照模块分成不同的Web Service,比如有MasutaService.asmxHattyuuService.asmx等等。
LoginService.asmx
是专门用来处理用户登入的,开发中,不准手工进行更新,如有更新,我会通知大家从CVS上更新。initialService.asmxFramework用的,也是不准手工更新。

5.2开发
现有的Web Service如下图。
目录图如下

工程图如下

注意点
1
,考虑到开发上的便利和管理上的便利,规定每个画面,每次操作,比如初始化,检索,更新操作,都在相应的模块的WebService中加方法,命名规则为
doInit_form*_*doSearch_form*_*doUpdate_form*_*
2
,原则上WebService文件中不写具体的业务逻辑,而是写在后台Business层的某个类里面,这样做是为了开发人员方便自己进行写测试代码测试后台的业务逻辑。
3
,一些masuta表直接放在Application域里面,如下Application[Constant.APPLICATION_KEY_DATA] =ds;
开发是使用方法为
DataTable dtDptcd=ds.Tables[0];

DataTable dtSyain=ds.Tables[1];

DataRow rowDptcd=MstHelp.searchTableByPK(dtDptcd,dptId);

DataRow rowSyain=MstHelp.searchTableByPK(dtSyain,id);

6.Dao层的开发
6.1概述
??
所有的业务逻辑都写在这层,类的位置为????
chuou.service.*.process.Business_*_*.cs
? 原则上每个画面对应一个类,共同的部分放在chuou.service.common目录下。
类图如下

6.2开发
?
?6.2.1继承
?
每个business类都要继承SuperDao类,SuperDao实现了getConnectioncloseConnectionupdateExecutequeryExecute等一系列方法,这样开发上就只要专注于业务逻辑,不用考虑.NET中的ADO.NET了。
类图如下

6.2.2调用
得到数据库连接为调用getConnection(),关闭数据库连接为调用closeConnection(OracleConnection conn),查询表为调用queryExecute(),更新表为调用updateExecute()。
6.2.3单表操作的便利
考虑到开发的便利,如果是进行单表的查询,更新,插入,删除,可以直接调用Dao的开发包。
类图如下

程序例子如下
IDao dao=DaoFactory.CreateDao(new DaoConfig(DatabaseType.ORACLE,Help.CONN_STR));

dao.Open();

LoginmanageModel model=new LoginmanageModel();

model.字段1 =new NString(id);

model.字段2 = new NString(dptId);??????????????????????

model.字段3??=new NDateTime(System.DateTime.Now);

dao.Insert(model);
dao.Close();
6.2.4Message的使用
程序例子如下

Message.getMessage("S1001"));

6.2.5 Log的使用
程序例子如下

using chuou.common.log;

……
private ILog log = ServerLog.getInstance().GetLogger(typeof (Business_3_2_1));

……

log.Info("step into the doSearch");

log.Error("Error in queryExecute() method",e);

log的输出位置默认为 c:/ chuou_server.log

6.2.5异常处理
? Dao层程序统一抛出DaoException异常,Business层统一抛出BusinessException异常。
类图如下

7.共同部分
类图

?

?

8. 程序测试
为了保证开发的质量,原则上对于后台的业务逻辑部分都需要写测试代码,使用Nunit工具来进行测试。
工程类图如下

Nunit
工具的使用如下

代码示范如下
[TestFixture]

public class TestDao{

private const string conn = "User Id=chuou;Password=chuou;Data Source=order;";

public TestDao(){?????? }

[Test]

public void testSelect()??????????????? {

IDao dao = DaoFactory.CreateDao(new DaoConfig(DatabaseType.ORACLE, conn));

dao.Open();

Test2Model model = new Test2Model();

model.Username = new NString("luohao");

Console.WriteLine(dao.FindRecords(model).Count);

dao.Close();}

[Test]

public void testInsert(){

IDao dao = DaoFactory.CreateDao(new DaoConfig(DatabaseType.ORACLE, conn));

dao.Open();

Test2Model model = new Test2Model();

model.Userid = new NString(DateTime.Now.ToString());

model.Username = new NString("luohao");

model.Date1 = new NDateTime(DateTime.Now);

model.Float1 = new NDecimal(new decimal(517.12f));

model.Number1 = new NDecimal(12345);

Console.WriteLine(dao.Insert(model));

dao.Close();}

?

[TestFixture]

public class TestBusiness_2_17

{

ILog log = ServerLog.getInstance().GetLogger(typeof (TestBusiness_2_17));

public TestBusiness_2_17()

{

}

[Test]

public void testDoSearch()

{

??????? DataSet result1=new Business_2_17().doSearch(null);

??????? Assert.IsNotNull(result1);

??????? DataSet result2=new Business_2_17().doSearch("000101");

??????? Assert.IsNotNull(result2);

}

}

9.工程结构


说明如下

? chuou_app为画面的工程,chuou_serviceBusiness层和Dao层的工程,chuou_test为测试工程,commonLib为公用的库,ModelGenerator为自动生成Model的工具。


?

?

2017年,你需要GET的9大技术领域

2016年过去了,然而我一点也不怀念它,因为2017年的技术趋势更加吸引人。回顾一年里业界的发展,2017年的技术趋势初现端倪。根据CSDN知识库这一年来大家关注的热门知识图谱,我们来给大家梳理一下2...
  • u012662731
  • u012662731
  • 2017年01月12日 20:36
  • 870

最近6个月开始做SLAM的项目,就一步步把资源的链接给共享出来。

 最近6个月开始做SLAM的项目,就一步步把资源的链接给共享出来。 项目内容:主要是从Andrew Davison中的MonoSLAM中起步,做Co-SLAM 推及 Swarm SLAM ...
  • BBZZ2
  • BBZZ2
  • 2016年03月01日 14:04
  • 1158

这是一个传奇的开始

这是一个传奇的开始http://www.saige.com/shop/list-397438.htm http://www.saige.com/shop/list-397432.htm http:...
  • u013642334
  • u013642334
  • 2014年08月06日 17:09
  • 7

一个JavaWeb项目中使用的部分技术

一个具体的Web项目中使用的部分技术: 框架: Spring+ SpringMVC + MyBatis Spring: 作为容器,工厂,用于解耦以及管理对象生命周期。 整合各类框架和依赖。 M...
  • renfufei
  • renfufei
  • 2015年08月10日 15:20
  • 5532

这是一个美丽的开始(致2014年的自己)

一年又一年,今年是我的大学准毕业的时期,今年也是我进入提高班第二年的时期,今年也是我思想上发生了很多变化的时期。这些变化都是这个特殊的时期该有的。       这一年,是我心理活动最多的一年,更多的明...
  • u013047824
  • u013047824
  • 2015年02月15日 11:21
  • 2710

0327 或许这是一个开始

Training 1:整数算法训练1.题目:通过编程实现,统计1~n有多少个9提示:n通过参数传入# include int main() { int n; int i,j; ...
  • weixin_37714014
  • weixin_37714014
  • 2017年03月29日 19:57
  • 71

asp.net web开发所用到的技术

基本要求 1. 熟悉一种语言的编程模型(3中程序执行顺序, 相关基本类型, 事件机制,反射机制, 函数变量作用域, 线程)   技术进阶: 2. 事件导向思维(UI的操作与有些逻辑需要事件, ...
  • u012441545
  • u012441545
  • 2016年06月13日 20:28
  • 1326

SMMC,这是一个好项目

。。。
  • shehun1
  • shehun1
  • 2013年08月31日 22:12
  • 975

VS2012不显示最近打开项目的问题

当我们使用VS的时间一长,最近打开项目列表就会越来越多,我们会用一种清除这个列表,只保留我们最常用打开项目名称的想法,如何实现呢?要清除他们并不能像清除windows最近打开的文档那么方便,需要在注册...
  • oLaiBa
  • oLaiBa
  • 2014年03月15日 00:46
  • 1809

电商网站一般用什么技术开发

目前国内电子商务网站技术构架可谓五花八门,从早期的ASP,到现在流行的.NET,都在电子商务领域应用的游刃有余。一个电子商务网站究竟用那项技术更好?其实也不能一概而论,以下仅仅是潇彧想跟大家一起来探讨...
  • luomingyi2016
  • luomingyi2016
  • 2017年11月01日 11:22
  • 865
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:这是本人最近开始作的一个项目,采用.net技术。
举报原因:
原因补充:

(最多只允许输入30个字)