1.从架构模型到数据模型
****对象关系映射****
------用例或者用例场景是构架模型获得的结果. 通过序列化就把对象存储到数据库中,通过反序列化把从数据库中获得的数据转化为对象.
-----和客户进行交流和沟通:
----充分[了解客户需求]
----可控[能够达到里程碑]
-----界面元素和物件的对应要特别注意.
对象关系映射:
----遵循范式(如:出版社,对于一本书而言,他可以作为一个属性. 当出现同名的出版社时,就会出错. 因此,如果把出版社作为一个对象,这样以后扩展就很容易,因为,相同的出版社名称可以设计不同的ID)
----设计过程是一个螺旋上升的过程,每次都是在不同层次上完成系统的设计.
----保证数据完整性.这主要要求理解不同对象的关系.如:实体完整性,域完整性(列完整性,如email地址),引用完整性.
----找出实体和属性
----找出关系层
===不要把数据层和逻辑层混为一谈.
2.使用SQL Server 2005开发特性
视图和存储过程都可以用来获取数据
----当需要查询得到的数据是一个表时 ,我们采用视图.
--- 逻辑层和数据层的交互主要时通过视图和存储过程来交互.当然,可以加入更多的层,达到更为松散的耦合.
触发器
------一类特殊的存储过程,负责的数据完整性可以采用触发器实现.效率较低.
Native web service
---不依赖于ISS,可扩展性好.可以很好的和其他系统进行集成.
service broker
3.数据层同业务逻辑层的分离
class customer{
customer()
{
}
~customer()
{
}
public int Age;
public string name;
}
由于该类直接暴露了类属性,因此,必须隐藏内部实现.
private int _age;
public int age
{
get{return _age }
set { if(value>0) _age = value }
}
同样的可以对name属性进行处理.
如果该类要和数据库进行交互,就必须添加函数
public void saveTODb()
{
//访问存储过程
}
public void loadFormDb()
{
//访问视图
}
但是,这个类和数据库时紧耦合的,也就是说,如果数据库从SQLSERVER转化为其他类时,就必须对所有saveToDB和loadToDB发生改变,所有,我们必须进行修改.
把该类继承于接口 IDbProvider,并修改相关函数为:
public void saveTODb(IDbProvider pd)
{
//访问存储过程
pd.save(obj)
}
public void loadFormDb(IDbProvider pd)
{
//访问视图
}
class SqlServerProvider : IDbProvider
{
public void save(object obj);
}
class AccessProvider : IDbProvider
{
public void save(object obj);
}