0

我正在尝试将业务层添加到我的简单 Web 应用程序中。
EF 为我生成的类,例如UserLang

我现在的 BL 是这样的:

public class BLuser
    {
        public static List<User> allUsers()
        {
            using (MyEntities ctx = new MyEntities())
            {
                var users = from us in ctx.Users select us;
                return users.ToList<User>();
            }
        }


        public static int getUsersLangId(int id)
        {
            using (MyEntities ctx = new MyEntities())
            {
                var langid = (from us in ctx.Users where us.Id == id select us.Lang.Id).FirstOrDefault();
                return langid;
            }
        }

        public static void changeUsersLangId(int userId, int langId)
        {
            using (MyEntities ctx = new MyEntities())
            {
                var user = (from us in ctx.Users where us.Id == userId select us).FirstOrDefault();
                user.LangId = langId;
                ctx.SaveChanges();
            }
        }

        public static void addNewUser(int userId)
        {
            User newUser = new User();
            newUser.Id = userId;
            newUser.LangId = 0;

            using (MyEntities ctx = new MyEntities())
            {
                ctx.Users.Add(newUser);
                ctx.SaveChanges();
            }
        }

    }

然后在我后面的代码中,我可以这样称呼它:
BLuser.changeUsersLangId(1,1);

这是好方法(尤其是静态方法)吗?我觉得我可能会错过一些东西,但在那种情况下,我不必因为静态方法而关心 BL 对象的持久性。

是否有一些有用的教程,我发现的是相当复杂的文章,新手不容易理解。
谢谢。

4

2 回答 2

1

我会将您的数据访问代码注入业务逻辑层。这样,对您的业务逻辑进行单元测试会容易得多。

看看依赖注入模式。

您的数据访问代码应该返回对象,请查看存储库模式

如果您对这些文章有具体问题,我相信 SO 用户可以提供帮助。

一般来说,静态方法从来都不是一个好主意,因为它们会导致难以进行单元测试的不灵活代码。

于 2013-03-19T13:46:26.797 回答
1

对于这种情况,我建议您使用Repository Pattern,此模式包含您的业务服务的外观。

此模式用于基于 ORM 的解决方案

链接: http: //www.codeproject.com/Articles/363501/Repository-pattern-with-Entity-Framework-Code-Firs

于 2013-03-19T13:42:47.673 回答