繁体   English   中英

将一个类划分为子类

[英]Splitting up a class into sub-classes

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

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..
    }
}

谢谢。

除了使用partial ,您的布局看起来还不错。 我不认为partial可以为您提供足够的扩展性,因为partial类必须全部驻留在同一程序集中。

更好的解决方案可能是创建扩展方法

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

当然,这样做之后,我听说了有关SQL的Linq,我们开始使用它了……所以您可能希望将其检查为另一种选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM