Depo ve Servis Katmanı arasındaki fark?
OOP Tasarım Desenleri, Depo Desen ve Hizmet Katmanı arasındaki fark nedir?
ASP.NET MVC 3 bir uygulama üzerinde çalışıyorum, ve tasarım desenleri bu, ama beynim anlamaya çalışıyorum sadece almaya değil...henüz!!
CEVAP
Depo Katman veri erişimi üzerinde soyutlama ek bir düzeyi sağlar. Yazmak yerine
var context = new DatabaseContext();
return CreateObjectQuery<Type>().Where(t => t.ID == param).First();
veritabanından tek bir öğe almak için, depo arabirimi kullanın
public interface IRepository<T>
{
IQueryable<T> List();
bool Create(T item);
bool Delete(int id);
T Get(int id);
bool SaveChanges();
}
ve Get(id)
Ara. Depo katmanı temel sunarCRUDişlemleri.
Servis katmanı depo kullanan iş mantığı, ortaya çıkarır. Örnek hizmet gibi görünebilir:
public interface IUserService
{
User GetByUserName(string userName);
string GetUserNameByEmail(string email);
bool EditBasicUserData(User user);
User GetUserByID(int id);
bool DeleteUser(int id);
IQueryable<User> ListUsers();
bool ChangePassword(string userName, string newPassword);
bool SendPasswordReminder(string userName);
bool RegisterNewUser(RegisterNewUserModel model);
}
Depo döndürür İUserService tüm kullanıcılar, ListUsers()
List()
yöntem sadece olanları iade ederken, kullanıcı erişimi vardır.
ASP.NET MVC EF SQL SERVER, bu iletişim akışı var:
≪- görünümleri Denetleyicileri ->Servis katmanı ->Depo katman ->- ^EF . SQL Server
Servis katmanı ->Depo katman ->EFBu parça modelleri üzerinde çalışır.
≪- görünümleri Denetleyicileri ->Servis katmanıBu bölümü görüntülemek modeller üzerinde çalışır.
DÜZENLEME:
/Siparişler için akış örnek//5 ByClient (belirli bir müşteri için Sipariş görmek istiyoruz):
public class OrderController
{
private IOrderService _orderService;
public OrderController(IOrderService orderService)
{
_orderService = orderService; // injected by IOC container
}
public ActionResult ByClient(int id)
{
var model = _orderService.GetByClient(id);
return View(model);
}
}
Bu sırada servis için arayüz
public interface IOrderService
{
OrdersByClientViewModel GetByClient(int id);
}
Bu arabirim döndürür model görünümü:
public class OrdersByClientViewModel
{
CientViewModel Client { get; set; } //instead of ClientView, in simple project EF Client class could be used
IEnumerable<OrderViewModel> Orders { get; set; }
}
Bu arayüz uygulamasıdır. Model sınıfları kullanır ve görünüm model oluşturmak için depo:
public class OrderService : IOrderService
{
IRepository<Client> _clientRepository;
public OrderService(IRepository<Client> clientRepository)
{
_clientRepository = clientRepository; //injected
}
public OrdersByClientViewModel GetByClient(int id)
{
return _clientRepository.Get(id).Select(c =>
new OrdersByClientViewModel
{
Cient = new ClientViewModel { ...init with values from c...}
Orders = c.Orders.Select(o => new OrderViewModel { ...init with values from o...}
}
);
}
}
'arasındaki fark s @Component, @D...
's-pratik - Çıplak olmayan Çıplak...
DAO ve Depo desen arasındaki fark nedi...
WCF Servis Uygulaması ve XML Hizmeti, ...
'Bağımlılık Enjeksiyon arasındaki...