一个比较异想天开的想法,麻烦大家给点意见

xiaovsjia 2010-01-13 05:50:09
刚开始学习.NET,途中遇到很多的问题。
就像MVP
例如一个用户模块。
数据表如下:
用户ID 用户名称 用户密码 手机 电话 QQ 年龄

首先建DAL层,其中一个最常用的方法,读取出用户列表
SELECT * FROM 用户表

该方法原本是想为用户管理做准备的,返回一个DataTable,赋值给一个GridView。
这本来很好。。。

但是后来在另外一个地方,需要用到按用户搜索。
所以加上一个DropList,但是总不能为了多一个需求就写多一个DAL以及BLL吧。。
为了偷懒就直接还是使用原来的读取用户列表的,然后设置DropList的Value以及Test为用户名称。
但是这样一来貌似 用户密码 手机 电话 QQ 年龄 这些数据读取出来之后就没用到。。
白白浪费掉了,造成效率的下降。。。
...全文
132 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaovsjia 2010-01-14
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wuyq11 的回复:]
可使用List <T>保存查询条件和数据实现查询
也可使用泛型类
[/Quote]


55555555,麻烦大大解释详细一点好么???
看不懂。。。
太高深的技术。。。
TalesTen 2010-01-14
  • 打赏
  • 举报
回复
去搜吧 .net 泛型[Quote=引用 14 楼 xiaovsjia 的回复:]
引用 12 楼 wuyq11 的回复:
可使用List <T>保存查询条件和数据实现查询
也可使用泛型类



55555555,麻烦大大解释详细一点好么???
看不懂。。。
太高深的技术。。。
[/Quote]
xiaovsjia 2010-01-14
  • 打赏
  • 举报
回复
555555555,麻烦顶上去拉。。
不要沉啊。。。
mngzilin 2010-01-14
  • 打赏
  • 举报
回复
~~~~飘过~~~~~
  • 打赏
  • 举报
回复
like
wuyq11 2010-01-13
  • 打赏
  • 举报
回复
可使用List<T>保存查询条件和数据实现查询
也可使用泛型类
GS1T74wjwpg 2010-01-13
  • 打赏
  • 举报
回复
理论上可以放在集合里,那么我们可以从集合中找到我们想要的东东了..通过关键字
xiaovsjia 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 beijingqinghuadaxue 的回复:]
你说的是返回类型的问题吧,既然用到了dal 那就返回一个实体好了,不用返回datatable了,



[/Quote]

呵呵,关键不是返回类型的问题。。
而是查询的问题
一个表可能有多个字段,也有很多地方需要调用到其中某些。
例如有时候我只需要用户名、用户密码
有时候我又只需要用户名、手机、年龄、QQ等用户信息
有时候也需要根据搜索的条件来返回用户信息。。
如果这些都要用重载来写成方法的。。。
那光一个用户模块写的代码量就足够惊人了。。
liaoyukun111 2010-01-13
  • 打赏
  • 举报
回复
想法不错
phf0313 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jshi123 的回复:]
MVP是什么?Most Valuable Pig?
[/Quote]
有才!
  • 打赏
  • 举报
回复
你说的是返回类型的问题吧,既然用到了dal 那就返回一个实体好了,不用返回datatable了,




jshi123 2010-01-13
  • 打赏
  • 举报
回复
MVP是什么?Most Valuable Pig?
xiaovsjia 2010-01-13
  • 打赏
  • 举报
回复
在需要使用到用户的功能的时候就可以直接创建一个用户的实体类出来
例如刚才的例子,DropList只要用户名就好的。
clsUsers_BLL UsersBLL = new clsUsers_BLL();
UsersBLL.用户名 = true;
DropList.DataSoure = UsersBLL.PostData();
DropList.DataBind();

这样一来有一个好处,就是如果我还要限定例如说名字里面有个罗字的,那我只需要在PostData方法之前加上
UsersBLL.AddUsersName("罗");

而用户管理的也完全兼顾到了
UsersBLL.用户ID = true;
UsersBLL.用户名 = true;
UsersBLL.用户密码 = true;
……
DropList.DataSoure = UsersBLL.PostData();
DropList.DataBind();
cfesc9 2010-01-13
  • 打赏
  • 举报
回复
顶下吧,
今天看晕了
xiaovsjia 2010-01-13
  • 打赏
  • 举报
回复
所有后来突发奇想。。
不如将这个写成一个实体类。
将 用户ID 用户名称 用户密码 手机 电话 QQ 年龄 作为属性,值为bool表示要不要SELECT出来。
再将每一种搜索条件作为每一个方法,如下:

属性字段:
用户ID..
用户名称..
....
查询语句

void AddWhereUserName(string strUserName)
{
查询语句 += string.Format(" AND UserName Like '%{0}%'", strUserName);
}

其他属性的搜索也是类似的。

最后用一个方法来提交查询

DataTable PostData()
{
string strSQL = "SELECT ";
foreach(string 属性 in 所有属性)
{
strSQL += 属性 + ",";
}
strSQL += 查询语句

return UsersDAL.Select(strSQL );
}
seesea125 2010-01-13
  • 打赏
  • 举报
回复
这样问题,就是看你要效率还是要规范了
如果是要规范,就应该一个过程,用不着全取出来,觉得效率是问题,可以加缓存之类的。。。
要是觉得就是不想要这几列,那你就只能是再重载一个方法,只返回你需要的这两列,不过重载多了,可能规范性就差了点,维护性也差了点
nosuchtracter 2010-01-13
  • 打赏
  • 举报
回复
没看明白有什么想法
对于小网站来说,所有的字段查询出来,可能影响不是很大
对于性能要求比较高,尽量减少把不必要的字段查询出来。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧