Viewmodel oluşturmak için fabrika sınıfına ihtiyaç var mı?


17

Bir meslektaşım ASP.NET MVC çözümlerimizde viewmodel nesneleri oluşturmak için fabrika sınıfı kullanılmasını önerdi. Fikir, görünüm modellerinin uygulamalarımızda oluşturulma biçiminin tasarımına ve sürdürülebilirliğine yardımcı olabilmesidir.

Başka birinin bu konuda tecrübesi olup olmadığını öğrenmek istedim. Biraz araştırma yaptım ve bu uygulamada çok az şey buldum.

Şu anda denetleyici düzeyinde viewmodel nesneleri oluşturuyoruz.

public ActionResult Index()
{
    return this.View(this.BuildIndexViewModel());
}

Bu.Build.IndexViewModel (), viewmodel sınıfını (tabii ki :) oluşturmaktan sorumludur. Ancak şu olasılıkları araştırıyoruz:

public ActionResult Index()
{
    return this.View(ViewModelFactory.CreateIndexViewModel());
}

Bu ilginç bir fikir, ama% 100 ikna olmadım. Diğer insanların bu konudaki görüşleri ile ilgileniyordum.


4
Dürüst olmak için yararı görmek için mücadele ediyorum. Nesnelerin inşasını gizlemek için bir fabrika kullanırsınız, ama neden bu durumda?
CodeART

3
BuildIndexViewModel yönteminiz zaten denetleyiciye özel bir fabrika yöntemidir. Bunu farklı bir fabrika sınıfına çıkarmanın tek nedeni, onu başka bir denetleyicide yeniden kullanmak olacaktır.
MattDavey

Her ikiniz de bu konuda benimle aynı düşünceleri paylaşıyorsunuz, bu yüzden yalnız olmadığım için memnunum :) @MattDavey Dürüst olmak gerekirse, modelin birden fazla denetleyiciyle kullanılacağından şüphe duyduğumu söyleyebilirim, bu da fabrikayı yapar fikir gereksiz. Konu işte tekrar geldiğinde bunu paylaşacağım.
Jason Evans

Şahsen, kendimi inşa etme sürecinde uzman olmak için viewmodel tipini tercih ederim. Uzmanlığın başka bir yerde kalması gereken tek zaman, inşaatın diğer uygulama alanları (örneğin depolar) hakkında bilgi gerektiriyorsa, bu durumda bir
kabinin görünüm modelini

@MattDavey: Bu iki yorumu, oylayabileceğim bir cevaba koyabilir misiniz?
pdr

Yanıtlar:


8

Bu durumda, izlenecek en iyi rehberliğin GRASP ilkeleri olacağını söyleyebilirim . Özellikle nesne oluşturma için dört kritere bakın:

Genel olarak, aşağıdakilerden biri veya tercihen daha fazlası varsa, B sınıfı A sınıfı örnekleri oluşturmaktan sorumlu olmalıdır.

  • B örnekleri, A örneklerini içerir veya bunlar için toplu olarak birleştirir
  • A'nın B örnekleri
  • B örnekleri A örneklerini yakından kullanır
  • B örnekleri, A örnekleri için başlangıç ​​bilgilerine sahiptir ve onu yaratıma aktarır.

Denetleyici sınıfınız (B), bu listenin # 3 ve # 4 öğelerine (ve viewmodel geri gönderildiyse # 2) eşleşir, bu nedenle viewmodel (A) inşaat davranışının yaşaması için zaten çok mantıklı bir yerdir. Gördüğüm kadarıyla beni bu inşaat davranışını uzman bir sınıfa çekmeye zorlayacak iki neden olurdu.

  • NEM ALMA - İki veya daha fazla denetleyicinin görünüm modeli oluşturma davranışını paylaşması gerekiyorsa, bunu ayrı bir bileşende kapsüllemek kodun yeniden kullanımını kolaylaştıracak ve çoğaltmayı önleyecektir.
  • Yapı davranışının depolar, doğrulayıcılar vb. Gibi diğer sistem bileşenlerine bağımlılıkları varsa ve bu bağlantıyı denetleyicinin kendisine tanıtmak istemiyorsanız (GRASP terimleriyle, saf bir imalat).

GRASP'taki bu 4 nesne oluşturma ölçütüne baktığımda, davranışı sadece bu listede ekstra bir kene kazanırsa ayrı bir fabrikaya çıkarırdım. Aksi takdirde, bunun herhangi bir değeri olmazdı.

Umarım yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.