使用 Linq To SQL 时,我是不是应该在 BLL 类中使用数据访问和业务逻辑

Posted

技术标签:

【中文标题】使用 Linq To SQL 时,我是不是应该在 BLL 类中使用数据访问和业务逻辑【英文标题】:Should I be using Data Access and Business Logic inside my BLL class when using Linq To SQL使用 Linq To SQL 时,我是否应该在 BLL 类中使用数据访问和业务逻辑 【发布时间】:2012-07-05 16:31:40 【问题描述】:

我正在使用ASP.NET Web Forms/C#

我研究了如何在我的应用程序中实现BLLDLL

我发现很多人说使用 Linq To SQL 代替了 DAL 本身。

所以您应该在BLL 类本身中访问数据并实现业务逻辑。不确定它是否正确。

目前我有一个类CustomerBLL。我正在访问数据并在其中实现业务逻辑。

所以我的问题是,这是一个好方法吗?

我可以关注这个吗?

目前我只有一个 BLL 类,我应该每个 .aspx 页面只使用一个还是一个或将类似的页面组合在一起。

这是我的CustomerBLL.cs(仅包括几个功能)。

namespace CwizBankApp

    public class CustomerBLL
    
        public string GetDateFormat()
        
            using (var db = new DataClasses1DataContext())
            
                var format = db.CODEs.Where(code => code.NAME.Equals("dateformat")).Select(code=>code.DRNAME) .SingleOrDefault();  
                return format;   
            
        

        public IList<string> GetAccountTypes()
        
            using (var db = new DataClasses1DataContext())
            
                var  acctype = db.mem_types.Select(account=>account.CustCategory).Distinct().ToList();
                return acctype;
            
        




        public IList<mem_city> GetCities(int index)
        
            using (var db = new DataClasses1DataContext())
            
                var city = db.mem_cities.Where(c => c.state_id.Equals(index)).ToList();
                return city;
            
        

        public string InsertDate(string datefield,string dateFormat)
        
            string dd, mm, yyyy;
            string date;
            string [] split = Regex.Split(datefield, @"/");
            yyyy = split[2];
            if (dateFormat.Equals("British"))
            
                dd = split[0];
                mm = split[1];
            
           else
            
                dd = split[1];
                mm = split[0];
            

            date = mm.PadLeft(2, '0') + "/" + dd.PadLeft(2, '0') + "/" + yyyy;  
            return date;
        

        public string RetrieveDate(string datefield,string dateFormat)
        
            string dd, mm, yyyy;
            string date;
            string [] split = Regex.Split(datefield, @"/");
            dd = split[1];
            mm = split[0];
            yyyy = split[2];

            if (dateFormat == "British")
            
                date = dd.PadLeft(2, '0') + "/" + mm.PadLeft(2, '0') + "/" + yyyy;   
            
            else
            
                date = mm.PadLeft(2, '0') + "/" + dd.PadLeft(2, '0') + "/" + yyyy;   
            
            return date;
        

欢迎提出任何建议。

【问题讨论】:

【参考方案1】:

通常我将 BL 与 DAL 分开,因此 DAL 需要对 BL 的引用。这意味着 BL 包含 POCO 和一个描述存储库/工作单元/的接口......所以要回答你的问题,是的,我仍然会创建一个使用 L2S 的 DAL。

为了回答您的第二个问题,我将为您域中存在的每个实体创建一个业务对象。通常这与 DAL 中的表匹配。 aspx 的代码隐藏包含页面的逻辑,而不是业务层。

【讨论】:

非常感谢您的建议。 任何文章链接或简单示例都会有很大帮助。谢谢。 我会看看能不能自己做一个,但我不能预测什么时候。

以上是关于使用 Linq To SQL 时,我是不是应该在 BLL 类中使用数据访问和业务逻辑的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows Phone 上使用 Linq to SQL 时,是不是可以提高批量删除的性能?

在 LINQ-To-SQL 中,我应该使用 NOLOCK 来提高性能吗?

我应该开始使用 LINQ To SQL 吗?

我应该在linq-to-sql中选择哪种关系?

LINQ to SQL class LINQ to sql Objects?

在 BLL 或 UI 中使用 Linq-to-SQL 实体?