2016-03-21 25 views
1

Asp.net MVC projesinde çalışıyorum. Genel depo oluşturmak için link'u takip ettim.Tüm tablo özelliklerini UOW sınıfında (Genel havuz kalıbı)

public class UnitOfWork : IDisposable 
{ 

    private LeisureEntities context = new LeisureEntities(); 
    private IGenericInterface<cust_order> _customerOrderRepository; 
    private IGenericInterface<tblCustomer> _customerMasterRepository; 


    public IGenericInterface<cust_order> CustomerOrderRepository 
    { 
     get 
     { 
      return _customerOrderRepository = new GenericRepository<cust_order>(context); 
     } 
    } 

    public IGenericInterface<tblCustomer> CustomerMasterRepository 
    { 
     get 
     { 
      return _customerMasterRepository = new GenericRepository<tblCustomer>(context); 
     } 
    } 

    public void SaveChanges() 
    { 
     context.SaveChanges(); 
    } 



    private bool disposed = false; 

    protected virtual void Dispose(bool disposing) 
    { 
     if (!this.disposed) 
     { 
      if (disposing) 
      { 
       context.Dispose(); 
      } 
     } 
     this.disposed = true; 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 
} 

Ben özellikleri olarak UOW sınıftaki tüm Repositories beyan ve sonra doğrudan kontrolör veya hizmet tabakasında bu UOW kullanabilir. Bu, DAL bir genel depo sınıfında yalnızca iki sınıfa ve db tablolarının tüm özelliklerine sahip bir UOW sınıfına sahip olacağım anlamına gelir.

Her tablo için ayrı bir Yığın oluşturmanız gerekir.

Veritabanı ilk yaklaşımını kullanıyorum.

Lütfen öneriniz.

cevap

3

Hayır !! Tüm varlıklar için UOW oluşturma yaklaşımı çok kötü bir yaklaşımdır. Ama verileri soyutlama fikri iyidir.

Tüm varlıklar için bir GenericRepository kullanıyorum. Verileri soyutlamak için en iyi yol budur. Her depo, belirli bir kuruluştaki işlemlerden sorumludur.

Ardından, tüm iş mantığımı Hizmetlerim'de ayıkla -> Bu şekilde iş mantığı, SOLID ilkelerini izleyerek bir sınıf kitaplığı projesinde ayrılır.

Her nesnenin tam olarak ihtiyacı vardır. Mimarimi kontrol etmek ve yeniden kullanmak için size açık kaynak kod deposu vereceğim. Veri klasörüne bir göz atın. Tek fark, bir veritabanı ilk yaklaşımı kullandığınız ve çözümün, db içeriğini kısmi bir sınıfla genişletmek olduğu yönündedir.

Buna bir bakın. Bu en iyi uygulamaları takip ederek yapılır. Çok kolay genişletilebilir.

Mvc eshop architecture

......................................... .................................................. .................................................. .......................................

Evet, mimari biraz soyut ve ilk görüşten çok karmaşık sanırım, ama bu sizi süper ediyor Gelecekte yaşanmadan önce birçok mimari sorun. Size en basit hizmeti/iş mantığını/istediğiniz gibi yapıştıracağım, böylece neyin neden ve niçin daha net olduğunu anlayabilmeniz için. Tüm servislerde, IQueryable'a geri dönmeli ve sorgunuzu sıkıştırmalısınız. Denetleyicilerinizde, denetleyicilerin verileriniz hakkında hiçbir şey bilmediği hizmeti ve web bölümünü enjekte edersiniz. Ninject veya AutoFak kullanarak bağımlılık inversiyonuyla hizmeti enjekte ettiğinizde, bu yöntemleri kullanır ve kontrol sonucunu kontrol cihazınızda gerçekleştirirsiniz. Ana denetleyicide hizmeti nasıl enjekte ettiğimi görebilirsiniz. Yapabileceğiniz en iyi şey, görünüm modelleriniz için Automapper'ı kullanmak ve özellikleri otomatik olarak biçimlendirmektir. Bu durumda kontrol cihazlarınız temiz ve birkaç satır koduyla kalıyor. İsteği önbelleğe alma, verileri alma ve görüşe aktarma görevlerini yerine getirirler. Umarım bu sizin için yararlıdır. Bu yaklaşımla, hızlı çalışan, işleri desteklemek ve değiştirmek kolay, harika ve büyük projeler yapabilirsiniz.Veritabanını çok kolay değiştirebileceğinizi, veri havuzuna bir yöntem ekleyebileceğinizi ya da yalnızca başka bir özel eylem gerçekleştirebileceğinizi varsayalım. Örneğin, id olarak sorguladığınız zaman tüm verileri değiştirilmiş olarak işaretlemek isterseniz GenericRepository ve bu bayrağı bir satır ekleyin ve voila :)

+0

Bu harika ama bu projenin bir kısmını anlayabiliyorum. Çok fazla sorum var ama cevapları yok. Neden jenerik depo sınıfında savechanges(), nasıl işlem ve uow elde edilir. Bir kategori sınıfı hizmetine ilişkin kodu yapıştırabiliyorsanız, –

+0

yardımcı olacaktır. Çünkü bu Genel Depoda çalışıyorsunuz. EF'deki her şey varsayılan olarak bir işlemdir. Varlıklarınızın EF proxy'lerinde her şey var. Örneğin, 20 hak özniteliğini değiştirebilir ve SaveChanges'i aradığınızda her şey bir kerede geçecektir. GenericService'i, servisler arasında ortak işlevselliği yerleştirebileceğiniz uygulayabilirsiniz. –

İlgili konular