Gần đây tôi đã có một cuộc thảo luận với một đồng nghiệp về việc liệu một kho lưu trữ trong một ứng dụng web (trong trường hợp này là một lớp trên cùng của Entity Framework) nên được thực hiện như các lớp tĩnh hoặc không tĩnh.Kho lưu trữ là lớp tĩnh hoặc không tĩnh?
Trong câu hỏi này, tôi không quan tâm nếu một hoặc thực hiện khác là một thiết kế tốt hơn (OOP), bởi vì điều đó sẽ làm cho câu trả lời chủ quan.
Điều tôi quan tâm: Đang khởi tạo và xử lý Khung thực thể DbContext
được xử lý theo cách khác trong CLR khi bạn so sánh tĩnh với lớp không tĩnh? Tôi đặc biệt quan tâm đến các vấn đề đa luồng và sử dụng bộ nhớ, vì mã này chạy trong một ứng dụng web MVC.
Chỉnh sửa: Chỉ cần làm rõ: Tôi không quan tâm đến việc xử lý hoặc thu gom rác thải của lớp lưu trữ, điều gì sẽ xảy ra với biến số địa phương context
. Có đúng không khi nói rằng đó là rác được thu thập (hoặc ít nhất được đánh dấu là rác thu thập được) khi phương pháp trả về?
kho tĩnh
public static class AccountRepository
{
public static AccountModel GetAccountById(int accountId)
{
using (var context = new EntitiesContext())
{
var account = context.Accounts.FirstOrDefault(a => a.Id == accountId);
if (account == null)
{
return null;
}
return new AccountModel
{
Id = account.Id,
Username = account.Username,
// etc...
};
}
}
}
Non-static kho
public class AccountRepository
{
public AccountModel GetAccountById(int accountId)
{
using (var context = new EntitiesContext())
{
var account = context.Accounts.FirstOrDefault(a => a.Id == accountId);
if (account == null)
{
return null;
}
return new AccountModel
{
Id = account.Id,
Username = account.Username,
// etc...
};
}
}
}
Tôi có thể sai, nhưng cách xử lý rác thải/rác thải áp dụng cho các thành viên tĩnh như thế nào? Họ không bao giờ được xử lý/bỏ đi. – Veverke
Thành viên tĩnh được lưu trữ trên heap tần số cao và heap này không bao giờ được tiếp cận bởi GC. –