倾家荡产问一个问题:三层架构如何应付数据库的扩展......
如题:如何部署三层架构 才能应付数据库的变动(表的修改)呢?? --------------------编程问答-------------------- nettiers --------------------编程问答-------------------- 关注
帮你顶 --------------------编程问答-------------------- 关注.帮你顶! --------------------编程问答-------------------- 看petshop 3.0的框架吧。 --------------------编程问答-------------------- 帮忙顶.. --------------------编程问答-------------------- 关注中…… --------------------编程问答-------------------- 写个框架支持,我的做法是对所有表有自己的系统表来对应,定义的系统表对所有字段有定义,包括用什么控件来展现这个字段,怎么验证这个字段的值是否合法等。这些都会反映到程序中,然后一旦对数据表进行变更,只需对配置数据改改就行。而代码基本上不用改,除非有非常特殊的需求。当然既然是框架,你可以把这个特殊需求再做进去,这样以后碰到这种需求也可以不改了。整个框架的功能将是一个积累的过程。 --------------------编程问答-------------------- 可以参考参考petshop 4.0看看
友情up
--------------------编程问答-------------------- 不管是用手工或者用工具也好修改相应Model
我没有想出更好办法,关注,顶顶 --------------------编程问答--------------------
强烈要求说明白 petshop是怎么处理的 --------------------编程问答-------------------- up --------------------编程问答-------------------- 我看楼主提的这个问题是无法完美解决的或者说解决不了的
如果定义了model修改数据库表,对应的model和存储过程SQL语句等都得修改。使用三层也不是全是优点,频繁修改的数据结构就不适合三层。
谁能提供更好的方案? --------------------编程问答-------------------- 只要你有耐心,可以把执行SQL语句用函数实现,表字段用参数传递,采用方法重裁各种你未来可能改变的字段,都以参数形式考虑进去。 --------------------编程问答-------------------- 我的做法是基本的model和存储过程SQL语句等都弄个软件自动生成,复杂的手动修改
做的多了把常用的封装,这样差不多效率已经非常高了 --------------------编程问答-------------------- 没办法 --------------------编程问答-------------------- 假设我产品数据表 需要新加一个字段 那该如何来办呢?? --------------------编程问答-------------------- 将对数据库操作包括读,改,添,删分别写在不同的方法中
在方法实现类似于beans的方法 get set
根据传进方法的参数不同,读取不同的数据
创建类的实例调用set方法 --------------------编程问答-------------------- 加字段肯定得重新生成一遍 --------------------编程问答-------------------- 对于表的修改 这个肯定要改懂程序的 比如实体类呀 什么的 petsgop 只是针对数据库的类型的变化 跨数据库呀 sql 变成oracl 之类的 --------------------编程问答-------------------- 该动手的还是要动手的…… --------------------编程问答-------------------- 一劳永逸是没有的,数据库库的变动,或多或少都有相应的修改,
三层架构优点可以比较清晰地知道在哪一层上修改! --------------------编程问答--------------------
呵哈!!那三层都的修改!! --------------------编程问答-------------------- 将改动降低到最小. 不要直接用SQL语句. 修改了数据表以后,存储过程很可能是需要修改的,然后再到代码里的数据操作层修改一下相关存储过程参数. --------------------编程问答-------------------- params SqlParameter[] parms 参数组不知道行不 --------------------编程问答-------------------- 表修改了,程序肯定要动的,从底层改到高层,三层结构只是维护起来条理清楚些,知道从哪里改。 --------------------编程问答-------------------- 额~~~,表结构更改特别是字段更改。程序能否真正做到免修改呢?我看很难。只能设计到最少修改。三层的好处可能是你仅仅修改修改数据层就OK
不会影响到其他层 --------------------编程问答--------------------
如果还有更多的其他数据形式
就用IDataParameter[]就可以了啊
这有何难??
数据源用IList之类的就是了啊
你有没有好好看petshop4.0啊
上面全有的啊 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 为什么上面有人说要看PetShop呢?
其实PetShop的不足正是体现在对数据扩展的无所适从上。
PetShop中可以认为每一个表对应一个实体类
这些实体类都是硬编码的
一旦数据表有变动
那么PetShop相应的层都必须做相应的变动,像
Model层下的实体文件
DAL层下的数据访问文件
甚至是接口定义也可能需要变动
表现层就更不用说了,数据绑定得重新做,实体类的填充也需要重新做。
如果PetShop好到足够应付所有的项目
估计也不会有Linq的问世了
PetShop是个模板工程,用来体现C#的易用性和高级语言的高级之处以及纯OO
真正的项目,尤其是大型项目,PetShop这样的数据访问架构是不太合适的。 --------------------编程问答--------------------
前些时候 读了 petshop一段时间 并且深陷其中
还好听到楼上的说话了
--------------------编程问答-------------------- up --------------------编程问答--------------------
--------------------编程问答-------------------- d --------------------编程问答-------------------- 如果是表字段的增删.你只要改Model和你的数据层中相应的方法应该就够了.
public class User
{
public User() { }
/// <summary>
/// 用户ID
/// </summary>
public int ID { get { return this.id; } set { this.id = value; } }int id;
/// <summary>
/// 用户名
/// </summary>
public string Username { get { return this.username; } set { this.username = value; } }string username;
//---其它属性
//根据用户ID返回用户实例
public static User GetByID(int userID)
{
return DataProvider.GetInstance().GetUser(userID);
}
}
//数据接口
public inte易做图ce IDataProvider
{
User GetUser(int userID);
}
public class DataProvider
{
public static IDataProvider GetInstance()
{
//仅示例.实际使用中根据情况灵活配置
string assemblyPath = "数据层程序集path";
string classNmae = "接口类";
System.Reflection.Assembly.LoadFrom(assemblyPath).GetType(className).GetConstructor(new Type[0]).Invoke(null) as IDataProvider;
}
}
//数据层: 实现数据接口即可
public class MyData : IDataProvider
{
#region IDataProvider 成员
public User GetUser(int userID)
{
//在这里,读取数据库信息,实例化一个User赋值并返回
//比如现在数据存储做了变更,把一个用户信息分别保存至oracle数据库的a表和sql server的b表
//只需要更改这里的代码
return new User();
}
#endregion
}
如果有新增的表.新增的功能.那肯定是要改其它地方了. --------------------编程问答-------------------- 我写过两篇短文:
http://topic.csdn.net/u/20080227/12/AEEEC383-2DEF-48B9-8BAB-336926F1D33B.html
http://topic.csdn.net/u/20081002/01/f38779f9-e44a-484b-bda3-5a6ae57dadfb.html
可以帮你带来一种新的架构思维方式。 --------------------编程问答-------------------- petshop4.0用接口的方式是适应不同数据之间的变更。
但如果数据库中某个表的变更,似乎没办法作到不变更。 --------------------编程问答-------------------- 全自动的联动更新几乎是不可能的,根本无法适应稍微复杂一点的业务逻辑 --------------------编程问答--------------------
开个玩笑 你长得有点像董浩叔叔 --------------------编程问答-------------------- 是,生活中也有很多人都这么说过。 --------------------编程问答-------------------- 另外,我看到在“.net分析与设计”论坛的首页列表上也有一篇帖子:http://topic.csdn.net/u/20070525/17/9ccaa2f5-82ad-458b-90b1-3f9768304d75.html --------------------编程问答-------------------- petshop --------------------编程问答-------------------- up --------------------编程问答--------------------
你加了一个字段,而表示层要显示出来,那你从sql语句select至少要加上这个字段,逻辑层要返回给表示层,你在表示层要加上这个字段
可以这么说,你动了程序的根本结构。
--------------------编程问答-------------------- 可以参考参考petshop 4.0看看
友情up --------------------编程问答--------------------
哈哈,就是你没得他老~ --------------------编程问答-------------------- 倾家荡产???
有这么严重吗,LZ! --------------------编程问答-------------------- 学习....关注...帮顶... --------------------编程问答-------------------- 修改数据表结构,增加或删除数据表,都要修改三层结构之中的数据连接这一层吧,我想分三层结构是为了让你在修改数据表的时候不用修改业务逻辑层和显示层,就是在一定条件下让你修改的代码量最少。
楼上各位说的都不错。该动手还是动手~呵呵 --------------------编程问答-------------------- 没有很好的办法,如果表改动不大,以前一直用手工修改。
不过后来用LinQ,感觉相当方便。
表修改后,直接用Sqlmetal重新生成映射类。
只需修改少量的业务代码就OK了。 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 学习 UP --------------------编程问答-------------------- 我就奇怪了,为什么很多人提到了PetShop啊
你们到底 认真研究过 PetShop没?
对于如何消除 数据库的变更 怎么就没人 提到ORM 的思想啊:
用ORM 可以减少 数据库表的变动 所带来的 代码 改动,减少 BS层过多的 对 DAL层的依赖
BS+ORM+ DAL
--------------------编程问答-------------------- up --------------------编程问答-------------------- 这个问题我已经变像的解决了。
三层架构
web
bll
dal
model
1.基本上来说跟WEB这一块是没有什么关系的
2.代码架构我想一般就是简单的添加、删除、修改、获得model、获得分頁等最简单和基础的方法
3.在更改了表结构的时候试想我们需要修改什么?肯定是dal和model
一般来说使用三层架构并且不是非常多人开发的情况下不是进行分层开发,而是分模块开发,所以这些基础的代码肯定不是手写的使用代码生成器直接生成即可,那就是说dal和model这两是需要重新生成的,没错我们就是重新重成它即可,让我们的代码生成器更加智能些直接的对此文件进行覆盖即可;你是否会问如果我写进去了一些方法怎么办,那你就得想如何不让这些方法被替换掉;是不是有点头绪了类是可以继承的,我们只需要将自动生成和手写的代码分开即可,让自动生成的代码来继承我们自已写的代码即可;当发生表字段更改的时候你只需要点击生成代码即可。 --------------------编程问答-------------------- 个人认为应该是要修改MODEL层的 --------------------编程问答-------------------- http://www.smartmm.cn/archives/92.html
看一下我的blog,里面有这方面的介绍,关于petshop怎样处理多层的。 --------------------编程问答-------------------- ORM是王道 --------------------编程问答-------------------- 得说出解决方法啊。说一个orm谁不会说啊,为什么orm能解决,现在使用petshop架构就不能解决?
--------------------编程问答--------------------
学习。不管怎么样,都不会那么容易的自适应!如果有的话,那么代价一定也是很大的! --------------------编程问答-------------------- 学习一下 --------------------编程问答--------------------
狂顶! --------------------编程问答-------------------- 得说出解决方法啊。说一个orm谁不会说啊,为什么orm能解决,现在使用petshop架构就不能解决?
引用 57 楼 patrickpan 的回复:
ORM是王道
===============================================
比如:用微软的LinQ。
你数据库修改以后,直接运行sqlmetal 命令。
会自动获取一个映射类。
然后你在业务层可以直接用了。
数据表修改以后,现在要做的是运行sqlmetal 命令,直接修改业务层。
补充:.NET技术 , ASP.NET