asp.net-mvc – 应用程序服务层作为静态类
|
在我的ASP.NET MVC应用程序中,我有一个包含所有业务逻辑/服务层的项目.该项目与我的数据库(实体框架)进行交互,该框架位于单独的项目中. 我想要轻松访问服务层,所以我创建了静态类,所以它们可以很容易地被引用.例如,如果我在我的控制器,我需要创建一个新的帐户: ServiceLayer.Accounts.CreateAccount(userName,passWord) //etc.. 然后,服务层执行所有必需的逻辑,然后通过DatabaseLayer中的存储库创建用户. private static AllRepos _Repos;
private static AllRepos Repos {
get
{
if(_Repos == null)
_Repos = new AllRepos();
return _Repos
}
}
public static void CreateAccount(string username,password)
{
string salt = GenerateSalt();
Account newAccount = DatabaseLayer.Models.Account
{
Name = username,Password = HashPassword(password,salt),Salt = salt
};
Repos.AddAccount(newAccount);
}
因为我不想在我的服务层中做各种各样的事情: AccountRepository Accounts = new DatabaseLayer.AccountRepository(); 我为我的存储库创建了一个包装类,所以我只需要实例化一次以使用所有其他的存储库. public class AllRepos
{
private AccountRepository _Accounts;
public AccountRepository Accounts
{
get
{
if (_Accounts== null)
_Accounts= new AccountRepository();
return _Accounts;
}
}
// the same is done for every other repository (currently have about 10+)
}
这在服务层的静态类中使用. 因为我所有的服务层类都是静态的,而且Repos字段也是静态的,所以我遇到的一个明显的问题是从多个数据文件中检索到相同的对象,从而导致更新/删除的奇怪行为. 我明白这是预期的,如果我使用静态成员/类,就像我上次使用应用程序的生命周期一样,但是有没有办法能够使用服务层作为ServiceLayer.Accounts.Method()而没有创建一个非静态类,需要在其使用的任何地方进行实例化,并且由于多个数据文本实例而不会遇到CRUD问题? 解决方法你的方法真的不是推荐的.就我个人而言,我绝对不会允许我的团队采用这种方式.缺点:主要的线程问题,正如你所经历的,这不是很简单的解决 创建存储库实例的最大原因是,如果需要,可以注入依赖项.最着名的参数是单元测试,所以你可以模拟依赖,但是我已经建立了一些存储库,这些存储库具有更改生产代码的接口依赖关系. 您应该只是将存储库实例化作为基础服务类的一部分.没有理由必须是“静态OR实例调用无处不在”.基类内部应该有有限的实例化实例化代码. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 使用Active Directory的REST API的授权方法
- asp.net-mvc-3 – 货币格式化MVC
- asp.net-mvc – System.NotSupportedException:不支持指定
- asp.net – NHibernate – ManagedWebSessionContext和WebS
- asp.net-mvc – 保存为“BodyPart_3ded2bfb-40be-4183-b789
- asp.net – 如何在一个新的选项卡中打开asp:HyperLink.Nav
- asp.net-mvc – ASP.NET MVC:将复杂类型绑定到选择
- ASP.net会话cookie丢失或删除
- asp.net-mvc-3 – MVC模型范围验证器?
- asp.net-mvc-2 – 什么是Html.Validate和Html.ValidateFor方
- asp.net-mvc-3 – ASP.NET MVC – 在不重写方法的
- 如何为枚举执行asp.net mvc 4模型绑定?
- asp.net – 从互联网上打开excel文件会打开一个空
- ASP.NET Repeater ItemDataBound事件中等效的Eva
- ASP.NET中的超链接控件和链接控件有什么区别?
- 部署 – Crystal报表文件未部署到ASP.NET MVC中的
- Asp.Net的FileUpload类实现上传文件实例
- asp.net – SignalR 2.0超时连接
- asp.net-core-mvc – 使用MVC Core下载文件
- asp.net-mvc – 如何为每个ActionLink指定默认区
