veter 2008-09-23 09:07
@晓彦
:-)
晓彦 2008-09-22 12:19
看完不顶怎么行!!!一起学习
一个太阳 2008-09-02 09:49
楼主分析的有道理,以前我一直以为是由于查询时LINQ缓存了数据造成“无法附加已经存在的实体”,所以我以前是用缓存实体的办法来解决的,这下总算知道了原因
jillzhang 2008-09-01 17:38
VinnyZhao 2008-08-12 10:35
这有违你所说的OO原则吧?@veter
我不太明白。
我之所以定义基接口是因为:
1、将专用接口中相同的方法提取出来,省得重复定义
2、对工厂类中的类型参数T进行限制(T必须继承基接口IDALConll<K>)public class Factory<T> where T : IDALConll<K>
然后定义专用接口
interface ICategory : IDALConll<CategoryInfo>
{......}
定义类实现专用接口
public class Category : ICategory {......}
因为Icategory继承于IDALConll<K>,所以Category也要实现IDALConll<K>中的方法。
在BLL中调用工厂类时,使用专用接口
ICategory dal = Factory<ICategory>.GetIDAL(path,Obj)
这样在业务层调用时不会出现不相关的方法,工厂类也能不用修改就能生成各种类型(必须继承于IDALConll<K>)。
我对设计模式和泛型都是初学,哪地方不对,请楼主说的详细一些!
非常感谢搂主,你对泛型的运用对我有很大启发!谢谢!
veter 2008-08-11 19:40
这有违你所说的OO原则吧?和抽象类重写差不多,慎用!
VinnyZhao 2008-08-11 11:45
我有一个想法,不知道行不行,请搂主看看
把IDALConll<K>作为基接口,如果业务层需要特殊方法,从基接口中派生出专用接口,修改工厂类如下:
public class Factory<T> where T : IDALConll<K>
{
public Factory()
{
}
/// <summary>
/// 根据配置文件生成一个传入的对象,并将其转为T泛型接口
/// </summary>
/// <returns>T</returns>
public static T GetIDAL(String path, String Obj)
{
return (T)Assembly.Load(path).CreateInstance(Obj);
}
}
这样工厂类同样可以生成很多不同的类型,同时避免代码臃肿。
这只是我一个临时想法,不知道行不行的通,请各位指教!
veter 2008-08-04 21:59
这么做的目的是通用,试想一下,如果我有一客户需要一个单机版的程序,我马上就可以给他打包一个,并剔除掉WCF,没有任何影响,再一个,如果有客户有不同的需求,可能业务流程比较复杂,那我马上就可以在其中加入工作流作为控制,对原有架构没有一点影响。
Allan. 2008-08-04 21:35
我实在没看懂你做这么复杂的意图何在。本来将WCF和LINQ To SQL应用在一起很是简单,一个DBML作数据访问层,如果你愿意你也可以加个数据访问的接口层,不过这里看起来不是很必要;一个WCF项目来做业务逻辑层。而这二者之间无非是为了让dbml产生的实体类可以被序列化传输,这可以简单的通过设置产生。
至于另外的factory,只需要做一个产生wcf访问接口的工厂类就成了。
架构,不在于复杂,而在于适用。
历史罪人 2008-08-04 11:50
在看看,是不是标准的C/S模式呢、?
雅阁布 2008-08-04 08:51
up!!
veter 2008-08-03 23:18
马上改正!
Jeffrey Zhao 2008-08-03 23:15
LINQ
TO
SQL
veter 2008-08-01 19:20
@VinnyZhao
可能这里有点误会,不好意思!这个泛型接口的意思很明显,就是要定义一组通用的方法,比如每个接口实现在所必须的方法(增,删,改,查),对于类特性,可以定义不同的接口去实现。
我个人认为泛型接口主要应用在小型系统比较好,帮助快速开发。
VinnyZhao 2008-08-01 10:42
我有个疑问,想请教搂主!
原来IDAL中有许多专用接口(IOrder,ICategory等),每个专用接口的方法签名都不尽相同。
现在统一成一个泛型接口,也就是说DAL层的实现类都要实现同一个接口。
那这个泛型接口IDALConll<T>就要包括原来所有的专用接口中的所有方法,否则的话,不能满足业务层的调用!
可这样的话,在业务层中调用IOrder的方法时,ICategory的方法也会出现!
会让调用者摸不着头脑!
而且面向对象的单一接口原则也说 多个专用接口优于统一接口!
请楼主解答!我是个菜鸟,初学泛型,请不要拍砖!谢谢!!!
onekey 2008-07-28 10:19
关注下一篇....
veter 2008-07-28 10:02
@Gray Zhang
下一篇将会展示
瑞克梅塔 2008-07-28 09:18
@Gray Zhang
什么是“trick形式的延迟加载”?
Gray Zhang 2008-07-28 09:11
@veter
如果能用具体代码展示一下调用的方式以及与普通的方案的比较就更好了
Gray Zhang 2008-07-28 09:10
@ken-123
分布式环境下的那个trick形式的延迟加载我知道,但那需要EF的IEntityWithKey的支持,LINQ中无法获取到EntityKey是写不出通用的延迟加载的
veter 2008-07-28 08:11
@Gray Zhang
对,而且有了这个关系个,对数据的操作将会变得非常的容易.
ken-123 2008-07-27 22:53
@Gray Zhang
分布式环境下有个鸟延迟加载,你看看EF
Gray Zhang 2008-07-27 22:32
你的意思是指再通过某接口的一个方法去把里面原本为null的List填充一下吗?
veter 2008-07-27 21:35
不会的,因为这个关系是需要你手动去加的,满足数据操作的需要,下一步我会介绍一个数据操作通用方法.
Gray Zhang 2008-07-27 20:22
如果不能延迟加载的话,我认为保持m:1的1的一端已经够了,如果把List给加载上来,很可能因为种种关系把整个数据库都弄出来了……
veter 2008-07-27 18:33
不可能做到延迟加载,但是接下来你会发现这个关系还是非常有意义.
Gray Zhang 2008-07-27 18:06
这样是可以,但是能做到延迟加载吗?如果没有延迟加载的话,关系就没有任何意义了
Allen Lee 2008-07-27 17:56
今天又学到一招了~~~
veter 2008-06-11 07:35
@杜上小楼
一起学习
杜上小楼 2008-06-10 17:12
我说说 iis6 里碰到的aspx页面无法显示的解决方法
iis管理--〉web扩展设置-->asp.net 设置成允许(默认禁止)。
你的样子 2008-06-10 15:47
非常感谢,我正愁这种问题怎么解决呢?
体彩 2008-06-10 13:56
受益颇深,转走了哈
土豆网56.com电视剧 2008-06-08 23:26
iis7强大了些。准备安装2008看看。
BAsil 2008-06-08 15:19
支持一下
veter 2008-06-08 11:08
--引用--------------------------------------------------
紫色永恒: 友情提醒,是dll不是ddl
--------------------------------------------------------
非常感谢你的!
紫色永恒 2008-06-08 11:03
友情提醒,是dll不是ddl
侯垒 2008-06-07 19:27
现在还是2005,还没有用上2008.
簡簡單單.. 2008-06-07 19:03
Mark
veter 2008-06-07 18:45
楼上的问题是?
swwf 2008-06-07 18:39
2008是Network Service吧?
chunfeng 2008-06-07 18:37
都是慢慢成长起来的
benbenxx 2008-06-07 18:04
"~/" 要加上runat="server"就可以了。如果没有runat="server" 那就去掉“~”
"~/" 表示根目录!
王孟军! 2008-06-07 17:29
这种解决问题的方法不错
梁逸晨 2008-06-07 16:45
给别人做事,能上2.0就不错了。
现在用3.5还不太现实。
至于问题1:只要你ASPX文件指定了LANGUAGE属性,服务器设置什么语言编译都是次要的(极少数的人为强制设置system.config的情况例外)
如果不是自己的服务器,最好不要再2008上面使用ACCESS,因为你无法确定别人的系统是32位还是64位,如果是64位的话,又要经过很复杂的设置才能执行ACCESS文件。
钢钢 2008-06-07 16:43
-------------------------------------------------------
说实在,在博客园发贴,真有点诚惶诚恐的感觉,很怕对不住大家。
-------------------------------------------------------
不要怕,错则改之。哪一个不是一步步成长起来的呢?
hcaihao 2008-05-16 18:09
WCF不支持Nullable的Serialize的
私家侦探 2008-05-05 20:23
java的c/s的事件编程就经常用到适配器类,要想部分实现接口的方法,就是在两个类中间加一个适配器类,
我们两个是半斤八两啊呵呵
veter 2008-05-05 19:22
这倒是个不错的方法,看来兄弟“设计模式”研究得有深度呀!
私家侦探 2008-05-05 00:21
---引用----------
不同的特点可以通过类实例访问
-----------------------------
如果这么做的话又失去切换dal层的作用啊,我有一个办法就是写一个适配器类用空的方法(方法中没有任何实现内容)去实现IDALConll中每个方法,然后dal层的每个类再去继承该适配器类,并重写和自己有关的方法
如果你每个dal类都只有增删改查存在这五个方法,那么这些类实现同一个接口没有错,但是dal类只有这五个方法能保证(估计)足够业务层使用吗?我看不一定.其实主要是要兼顾"能随时切换数据库"的作用,所以dal层会使用接口来隔离业务层,难啊,dal层和业务层的代码不好写,特别是业务层中能灵活的使用事务并兼顾各种数据库更不好写