Trong ứng dụng ASP.NET MVC của tôi, tôi có một dự án chứa tất cả lớp logic/dịch vụ nghiệp vụ. Dự án này tương tác với Cơ sở dữ liệu của tôi (khung Entity) nằm trong một dự án riêng biệt.Lớp dịch vụ ứng dụng dưới dạng lớp tĩnh
Tôi muốn truy cập dễ dàng vào lớp dịch vụ, vì vậy tôi đã tạo các lớp tĩnh trong đó để chúng có thể được tham chiếu dễ dàng. Ví dụ, nếu anh ở trên điều khiển của tôi và tôi cần phải tạo một tài khoản mới:
ServiceLayer.Accounts.CreateAccount(userName, passWord) //etc..
Lớp dịch vụ thì không tất cả các logic cần thiết, sau đó tạo cho người sử dụng thông qua kho lưu trữ trong 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);
}
Bởi vì tôi không muốn làm như sau ở khắp mọi nơi trong lớp dịch vụ của tôi:
AccountRepository Accounts = new DatabaseLayer.AccountRepository();
tôi thay vì tạo ra một lớp wrapper cho các kho của tôi vì vậy mà tôi chỉ phải nhanh chóng nó một lần để sử dụng tất cả các kho lưu trữ khác.
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+)
}
Được sử dụng trong lớp tĩnh của lớp dịch vụ.
Bởi vì tất cả các lớp lớp dịch vụ của tôi là tĩnh và trường Repos
cũng tĩnh, vấn đề hiển nhiên tôi gặp phải là nơi cùng một đối tượng được truy xuất từ nhiều datacontexts gây ra các hành vi lạ cho việc cập nhật/xóa.
Tôi hiểu rằng điều này được mong đợi nếu tôi sử dụng các thành viên/lớp tĩnh như tôi đã làm trong vòng đời của ứng dụng, nhưng có cách nào để có thể sử dụng lớp dịch vụ là ServiceLayer.Accounts.Method()
mà không cần phải tạo một lớp không tĩnh cần được khởi tạo ở mọi nơi nó được sử dụng và không gặp phải các vấn đề CRUD do nhiều cá thể datacontext?
"trên thực tế, một số phương pháp trợ giúp tốt nhất là tĩnh" Khái niệm "tốt nhất" của bạn là gì? –