這樣的功能能否實現?
現在准備用三層架構。但是考慮倒用戶的需求老是在變,比如
如果一個注冊頁面,我先前是在db裡面定義了幾個主要的屬性,但是做好給用戶看,說少了幾個屬性,這樣table要加column,注冊頁面也要加控件,相關的代碼都要做適當的修改等等,但是我現在希望不修改代碼的情況下,只需要修改talbe,和頁面,或者連頁面都不需要修改,所需的控件等原件都在後台輸出。
這樣做,感覺是後面維護會少很多事情,但是在性能上是不是要降低很多。
希望大家能給我一些可以參考的意見,謝謝!!
------解决方案--------------------可以页面初始化的时候动态生成控件啊
但是两个问题:
1.效率肯定慢
2.样式很难控制好
还有就是如果完全做到改了数据库结构后,页面也都随着改的话
会比较复杂滴,还不如直接手动改程序
------解决方案--------------------楼主可以参考一下ror的原理
不过这种实现治标不治本,我们根本无法预料到客户的需求变更是在什么范围内的
最好的办法就是用合同限制客户对需求的变革
------解决方案--------------------可以坐一个c/s 结构的程序自定义配置表单、报表,以及一些数据应应,表单的属性和字段都要写进数据库,不过控制页面的格式不太好控制
------解决方案--------------------三层架构的话,应该有一个数据层,那么在数据层中,你需要定义一些继承于DataTable的临时数据表类,这些类重写其构造函数 new,使它在生成时,自动建立一个和数据库表一样的二维表。
这样,在操作数据时,只需传递这个临时表。
而一旦库结构做了更改,只需要修改向应的类就可以使传递的表结构发生变化。
例如:
某 myDataTable 类中定义了 3个字段
//实例化一个 DataTable
myDataTable dt= new myDataTable;
//使用此二维表做参数,写插入数据库函数(可以判断表列,然后用for循环自动处理)
AddRecord(dt);
function AddRecord(myDataTable dt)
{
...
}
然后将数据库实际字段改为4,再将 myDataTable.new 的构造函数修改一下,使之成为4个columns,你会发现,AddRecord函数无需更改任何代码
------解决方案--------------------我觉得不好,至少后期维护会更麻烦,所以东西都依赖于数据库中,虽然修改的时候只是只改了一处,但实际却是牵动了所有层,这不符合模型驱动的设计思想,而且这种方式也极不灵活,比如那天客户要你添加一个广告上去,本来改改页面也就好了,而且很直观,但你要是去改动数据库的话,我想测试显示样式都会测试得够呛的,而且表示层本来就不应该去依赖于数据关系,楼主可以在中间层插入OR/M以隔离数据库与表示层的耦合