把问题总结下吧,留着日后参考:
┌───────┐ ┌───────────┐ ┌───────┐
│ │1 *│ │* 1│ │
│ Role │------>│ Relation │<------│Module │
│ │ │ │ │ │
└───────┘ └───────────┘ └───────┘
用户 关系 模块
--------------------------------------------------
描述:
用户权限管理
--------------------------------------------------
表结构:
Role(RID,RName,RSummary……) 用户表
Relation(RPID,RID(FK),MID(Fk)) 关系映射表
Module(MID,MName……) 系统管理模块表
--------------------------------------------------
架构模式:
Web、BLL、IDal、Factory、Dal、Model
--------------------------------------------------
主问题:
如何在显示所有用户(Role)的同时通过关系表(Relation)
也显示每个用户的多个系统管理模块(Module)名称?
在多对多的模式下Role、Relation、Module 表的
Model层、DAL层怎么写,怎么建立这种关系?
--------------------------------------------------
附问题:
在组合查询中,组合条件与SQL语句分别在BLL层、
DAL层中怎么体现?
--------------------------------------------------
语言:(C#/Net 1.1)
--------------------------------------------------
其他:学习PetShop中……
请大虾帮忙!跪谢!
==================================================
几种解释:
这个好办,用户list页面的时候,可以多显示2个功能按钮,一个是关系的设置,一个是模型的设置,
这3者之间的确是相互联系的,但是关键还是两两相连,所以只要处理好两两的关心就可以了。
可以用试图嘛,也不一定每个model都要对应一个dal
我都是每个表一个model
然后根据情况建立视图,关联了视图的表视情况在视图对应的dal里进行跟新
bll层该干嘛干嘛,一般没它的事
Jinglecat(晓风残月 >> 问题需简洁,错误要详细)
如何在显示所有用户(Role)的同时通过关系表(Relation)
也显示每个用户的多个系统管理模块(Module)名称?
在多对多的模式下Role、Relation、Module 表的
Model层, 怎么建立这种关系?
=====================================================
1,
实体关系模型(数据库)中的关系(外健)在实体对象模型(内存)中是通过 引用 来表示的
2,
对于 多对多 关系,大概分两种情况
a. 这个关系,不需要独立成一个“关系实体”,直观上看,数据库中这张中间关系表,一般只有两个外键列,那么实体对象模型不是需要一个与之对应的 Relation 类, Role 与 Module 之间是通过 引用 来表现的,而且这个“多”是通过“一”的一个集合表现的,这刚好与数据库相反(数据库通过在“多”那个表的建立外健表现),如这样定义
public Role {
// ...
// public int ID {
// get;
// set;
//}
// ...
private IList _modules; // .net 2.0 中,建议使用泛型 IList<Module>
public IList Modules {
get { return _modules; }
}
}
public Module {
// ...
// public int ID {
// get;
// set;
//}
// ...
private IList _roles;
public IList Roles {
get { return _roles; }
}
}
b. 如果你需要在这个关系上附加一些其他的信息(成为一个Role-Module的明细表),那么就需要设计一个类,不妨称为 RoleModuleDetail 来表示,实体对象模型中需要拆成了两个一对多来实现
public Role {
// ...
// public int ID {
// get;
// set;
//}
// ...
private IList _roleModuleDetails; // .net 2.0 中,建议使用泛型 IList<RoleModuleDetail>
public IList RoleModuleDetails {
get { return _roleModuleDetails; }
}
}
public RoleModuleDetail {
// ...
// public int ID {
// get;
// set;
//}
// ...
private Role _role;
public Role Role {
get { return _role; }
}
private Module _module;
public Module Module {
get { return _module; }
}
}
public Module {
// ...
// public int ID {
// get;
// set;
//}
// ...
private IList _roleModuleDetails; // .net 2.0 中,建议使用泛型 IList<RoleModuleDetail>
public IList RoleModuleDetails {
get { return _roleModuleDetails; }
}
}
在多对多的模式下Role、Relation、Module 表的
DAL层怎么写,怎么建立这种关系?
================================
3.
关于这个加载数据的问题,讨论起来实在太庞大了,涉及到方方面面,如是否使用连接,何种连接(内、外连接),是否延时加载,
比较简单的就是按表模块,一个个Model的加载,
希望其他大虾,给出好的建议
4.
在组合查询中,组合条件与SQL语句分别在BLL层、
DAL层中怎么体现?
==============
原则上设计, UI, BLL 都不应该有 SQL 语句痕迹的出现, 而是用Model的属性表示,并加上自定义的一套查询参数组合模式,传递到 DAL, 由 DAL 构造 SQL 语句(或者由存储过程实现)
查询参数组合模式
=========
比如,我定义一个可以表示三个关联对象的类 FilterTriplet,
public FilterTriplet {
public string PropertyName { //表示Model属性
get;
set;
}
public string PropertyValue { //表示要匹配的值
get;
set;
}
public string Operator { //表示运算符
get;
set;
}
}