SORU
19 ŞUBAT 2011, CUMARTESİ


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
19 ŞUBAT 2011, CUMARTESİ


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...}     
             }
         );
     }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Benjamin Heckendorn

    Benjamin Hec

    4 Mayıs 2008
  • SegaAmerica

    SegaAmerica

    5 Mart 2008
  • SRC RECORDS

    SRC RECORDS

    2 EKİM 2006