我正在尝试将业务层添加到我的简单Web应用程序中
为我生成的EF类User
,Lang
我目前的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对象的持久性。
是否有一些有用的教程,我发现的是相当复杂的文章,对新手来说不容易理解 感谢。
答案 0 :(得分:1)
对于这种情况,我建议您使用Repository Pattern
,此模式包含您商业服务的外观。
此模式在此解决方案中基于ORM
使用link:http://www.codeproject.com/Articles/363501/Repository-pattern-with-Entity-Framework-Code-Firs
答案 1 :(得分:1)
我会将您的数据访问代码注入业务逻辑层。这样,对您的业务逻辑进行单元测试将会容易得多。
查看Dependency Injection模式。
您的数据访问代码应返回对象,请查看Repository pattern。
如果您对这些文章有具体问题,我确信用户可以提供帮助。
一般来说,静态方法永远不是一个好主意,因为它们会导致难以进行单元测试的不灵活代码。