随笔 - 51  文章 - 0 评论 - 210 trackbacks - 6
<2007年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

严正声明 : 本站文章转载请注明出处.

与我联系

搜索

 

留言簿(11)

我的标签

随笔分类

随笔档案

Atlas相关

积分与排名

  • 积分 - 58801
  • 排名 - 800

阅读排行榜

.NetTiers是.Net下面一款出色的自动生成模版,能够非常快速地生成数据访问层并且可以方便地进行扩展

支持的特性也相当多,除常规的CRUD+分页查询外,还包含以下特性:

1. 自定义存储过程的自动封装, 这样就不用额外写代码就可以完成自定义存储过程的调用了, 但是存储过程要以它规定的命名规则进行命名这样它才会识别出来.

2. 对索引列生成查询方法, 比如在用户表中经常给定用户名和密码这两个条件, 在这两个列上建立非聚集索引,那么.NetTiers将自动生成包含这两个条件的查询方法.

3.支持Deepload级联查询, 这个虽然效率不是很高,但在中小型的应用上还是相当方便地.

4. 使用Processor机制来完成一系列流程的连续调用,进行事务处理.

具体的使用方法可以参见园子里面其它人写的文章或官方文档,这里主要要讨论的是如果使用.NetTiers生成的东西.

通常,我们的项目一般会使用一些源代码管理工具,这样的话在编辑一份代码文件之前需要将它签出来,但是在实际工具中,数据库的结构可能随时发生变化,在这种情况下就需要重新使用.NetTiers进行代码生成,如果我们直接使用它生成出来的解决方案进行开发的话就会遇到一些麻烦,这时要手动将它要生成的文件一个一个签出来几乎太困难了,那么怎么办呢?

我的办法是不直接使用它生成的解决方案,而是引用它编译之后的程序集,扩展部分的代码写在自己的工程中,从它生成的基类继承过来. 这样每将即使是要改库只需要将它生成的几个程序集签出来,重新运行CodeSmith生成代码后把编译出来的程序集拷贝过来覆盖掉再提交就OK了.

这时我们的Service层看起来可能是这个样子:

 

    public class UsersFacade : UsersServiceBase
    
{
        
public UsersFacade()
            : 
base() { }

        
public Users ValidateUser(string username, string password)
        
{
            SqlFilterBuilder
<UsersColumn> filter = new SqlFilterBuilder<UsersColumn>();
            filter.Junction 
= SqlUtil.AND;
            filter.AppendEquals(UsersColumn.Name, username);
            filter.AppendEquals(UsersColumn.Password, password);
            
int count = 0;
            TList
<Users> users = DataRepository.UsersProvider.GetPaged(filter.ToString(), null020out count);

            
if (users.Count > 0)
                
return users[0];
            
else
                
return null;
        }


        
public Users ValidateUserAlter(string username, string password)
        
{
            TList
<Users> users = Find(string.Format("Name = '{0}' AND Password = '{1}'", username, password));
            
if (users != null && users.Count > 0)
                
return users[0];
            
else
                
return null;
        }


        
public Users ValidateUserThird(string username, string password)
        
{
            GB.Data.ParameterizedSqlFilterBuilder
<Users> filter = new ParameterizedSqlFilterBuilder<Users>();

            filter.AppendEquals(
"Name""Darkangel");
            filter.AppendEquals(
"Password""5364241");

            TList
<Users> users = GB.Data.DataRepository.UsersProvider.Find(filter.GetParameters());
            
if (users != null && users.Count > 0)
                
return users[0];
            
else
                
return null;
        }

    }
再看看单元测试的代码:
    [TestFixture]
    
public class SampleFixture
    
{
        Users testUser 
= new Users();
        [TestFixtureSetUp]
        
public void Setup()
        
{
            Users u 
= new Users();
            u.Name 
= "Darkangel";
            u.Password 
= "5364241";
            u.UserId 
= IdentityGenerator.Instance.NextIdentity();
            testUser.UserId 
= u.UserId;
            UsersFacade fa 
= new UsersFacade();
            fa.Insert(u);
        }

        [TestFixtureTearDown]
        
public void Clearup()
        
{
            UsersFacade f 
= new UsersFacade();
            f.Delete(testUser.UserId);
        }

        [Test]
        
public void GetAllUserTest()
        
{
            UsersFacade facade 
= new UsersFacade();
            
//TList<Users> list = facade.Find("Name='Darkangel'");
            TList<Users> list = facade.GetAll();
            Console.WriteLine(
"Toatal user acount is : " + list.Count);
            Assert.IsNotNull(list);
            Assert.IsTrue(list.Count 
> 0);
        }

        [Test]
        
public void ValidateUserTest()
        
{
            UsersFacade facade 
= new UsersFacade();
            Users u 
= facade.ValidateUser("Darkangel""5364241");
            Assert.IsNotNull(u);
            Assert.IsTrue(u.UserId.Length 
> 0);
        }

        [Test]
        
public void ValidateUserAlterTest()
        
{
            UsersFacade facade 
= new UsersFacade();
            Users u 
= facade.ValidateUserAlter("Darkangel""5364241");
            Assert.IsNotNull(u);
            Assert.IsTrue(u.UserId.Length 
> 0);
        }

        [Test]
        
public void ValidateuserThirdTest()
        
{
            UsersFacade facade 
= new UsersFacade();
            Users u 
= facade.ValidateUserThird("Darkangel""5364241");
            Assert.IsNotNull(u);
            Assert.IsTrue(u.UserId.Length 
> 0);
        }

    }
这样我们就只需要管理我们的生成配置文件就可以了.

还在等啥,快去试试吧.
posted on 2007-11-29 09:59 沙加 阅读(695) 评论(2)  编辑 收藏 网摘 所属分类: .Net开发技巧系列

FeedBack:
#1楼 [楼主] 2008-03-11 23:11 沙加      
在后面的使用中发现好象还是第三种方法要好用一些,功能更多,特别是在获取分页列表的时候,按照某列排序+列条件.
  回复  引用  查看    
#2楼 [楼主] 2008-06-07 23:55 沙加      
Service层里面可以应用事务,如果需要在事务里面提交的数据最好使用Service层里面的接口.
  回复  引用  查看    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索


China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!

相关文章:

相关链接: