Ayrı Oluştur ve Düzenle işlemlerine sahip olmak veya Oluştur ve Düzenle'yi bir araya getirmek daha mı iyi?


15

ASP.NET MVC 2'yi bir İş Mantık Katmanı, Veri Erişim Katmanı [Saklı Yordamlar ve saklı yordamlarla konuşmak için sınıflar / yöntemler] içeren Denetleyici / Görünüm Sunum Katmanı ve Modeli ile kullanıyoruz.

İş katmanında ve yukarısında çoğu amaç için Edit, hem bir nesnenin oluşturulmasını hem de bir nesnenin düzenlenmesini temsil edebilir. Bu, bir "Kaydet" yöntemini tanımlayan Havuz Tasarım Desenimizle örtüşür. Saklı yordamın kimliğin 0 olup olmadığını kontrol edebilir ve sonra 0 ise yeni bir nesne oluşturabiliriz, aksi takdirde sadece mevcut nesneyi güncelleyebiliriz, çünkü kategori kimliği birle eşleşmelidir.

Birincil tartışma, Yaratılış'ı içeren Düzenlemeyi DAL katmanının ötesinde Oluştur ve Düzenle'nin ayrı bölümlerine ayırmanın en mantıklı olmasıdır.

Açık bir örnek rota olarak gösterilebilir:

Oluştur - http: // someurl / somearea / edit / 0

Düzenle - http: // someurl / somearea / edit / 254

vs.

Oluştur - http: // someurl / somearea / create

Düzenle - http: // someurl / somearea / edit / 254

Bununla ilgili belirlenmiş standartlar veya en iyi uygulamalar var mı?

Bunun küçük bir detay olduğunu biliyorum, ama bence bu lojistik açıdan önemli.


4
Şahsen, ayrı Oluştur ve Düzenle eylemlerinin çok daha temiz (ve muhtemelen bakımı daha kolay) bir uygulama olduğunu düşünüyorum.
Adam Lear

1
DAL'de bir yöntem, mantıklıysa API için iki yöntem.
CaffGeek

Benim bakış açımdan mvc'ye ayrı ayrı yaratma ve düzenleme doğal olarak geliyor ve bu yaklaşımı kullanarak mvc'yi sonuna kadar kullanmanın avantajını sağlıyor ve herkesin amacı olmalı.
maz3tt

Yanıtlar:


5

Kesinlikle tek sorumluluk ilkesine uymamak için Oluştur / Düzenle'yi ayırmaya değer olduğunu söyleyebilirim .

Bir de url doğru eylem sahip daha iyi SEO olduğunu iddia edebilir.

İkisinin ayrılmaması, kodun birim testini zorlaştırır.

Kodu okuyan yeni bir programcı muhtemelen bir "edit" yönteminde nesne oluşturmak zorunda olan kodu çok sezgisel bulamaz, sadece anlamsal olarak anlam ifade etmez. Ancak DAL Save () yöntemi ile sempati olabilir.

Bunu düşünerek, hepsini bir Edit yöntemine koymanın faydalarını gerçekten göremiyorum.


4

Genellikle DAL'de bir Saveyöntem oluşturmayı tercih ederim , ancak aslında Create/ Edit/ öğesini Deleteayrı olarak uygularım .

Örneğin, Saveyöntemim Nesne Durumunu kontrol eder ve gerekli olana bağlı olarak Oluştur / Düzenle / Sil yöntemini çağırır.

switch(obj.State)
{
    case ObjectState.New:
        CreateObject(obj);
        break;
    case ObjectState.Modified:
        UpdateObject(obj);
        break;
    case ObjectState.Deleted:
        DeleteObject(obj);
        break;
}

Bu, herhangi bir nesneyi kaydetmek için sadece bir genel yöntemi çağırmamı sağlar, ancak yine de her birinin (Oluştur, Düzenle, Sil) uygulanmasını ayrı tutar.


Bir silmeyi nasıl söyleyebilirsin?
NoChance

Genellikle nesnelerimin bir Stateözelliği vardır. Örneğin, Deletedüğmeyi tıklamak nesneyi Silindi olarak işaretler, ardındanSaveChanges()
Rachel
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.