将类拆分为子类

时间:2009-06-11 14:05:26

标签: c# class refactoring

我有一个业务逻辑层类,其中包含数据库中每个表的访问方法。由于现在有很多表,我想重组它以按实体对方法进行分组(以便在编码时更容易访问)。所以,从这个:

BLL.Database MyDB = new BLL.Database();
BLL.Entity.User MyUser = Database.UserGetById(42);

到此:

BLL.Database MyDB = new BLL.Database();
BLL.Entity.User MyUser = Database.User.GetById(42);

我希望该类在可能的情况下保持非静态,所有类的“部分”也是(允许我向主生成的类添加其他方法)。我有什么选择来实现这一目标?这是当前的布局:

namespace BLL
{
    public partial class Database
    {
        // private members..
        // constructor

        #region User
        public IQueryable<BLL.Entity.User> UserGetAll()
        {
            // ...
        }

        public BLL.Entity.User UserGetById(int UserId)
        {
            // ...
        }

        public void UserSave(ref BLL.Entity.User user)
        {
            // ...
        }

        public void UserDelete(int userId)
        {
            // ...
        }
        #endregion

        // More sets of methods for other entities in database here..
    }
}

这可行吗?

namespace BLL
{
    public partial class Database
    {
        private _User;
        public User
        {
            if (_User == null)
            {
                _User = new User();
            }
            return _User;
        }

        // Other data access classes here..
    }

    public partial class User
    {
        public IQueryable<BLL.Entity.User> GetAll()
        {
            // ...
        }

        // GetById, Save & Delete methods here..
    }
}

感谢。

2 个答案:

答案 0 :(得分:2)

除了使用partial之外,您的布局看起来还不错。我认为partial不会为你提供可行的技巧,因为partial类必须全部驻留在同一个程序集中。

更好的解决方案可能是创建extension methods

答案 1 :(得分:1)

是的,这是可行的。事实上,我实现了很多类似的东西。

当然,在这样做之后我听说了Linq to SQL,我们开始使用它了......所以你可能想把它作为另一个选项来检查。