SRP (Tek Sorumluluk İlkesi) objektif midir?


17

"Kullanıcı çekici" tasarımlar tasarlamak isteyen iki kullanıcı arayüzü tasarımcısını düşünün. "Kullanıcı cazibe" objektif olmayan ve sadece tasarımcıların zihninde bulunan bir kavramdır. Böylece tasarımcı A, örneğin kırmızı rengi alabilirken tasarımcı B maviyi seçebilir. Tasarımcı A, tasarımcı B'den tamamen farklı bir düzen oluşturur, vb.

SRP (Tek Sorumluluk İlkesi) hakkında okudum ve anladığım şey, bir OO tasarımcısından başka bir OO tasarımcısına kadar değişebilen öznel bir analiz veya sorumlulukların bozulmasıydı. Haklı mıyım? Başka bir deyişle, SRP prensibine dayanan bir sistem için iki farklı tasarım yapan iki mükemmel nesne yönelimli analizör ve tasarımcıya sahip olmak mümkün müdür?


4
Bence her türlü tasarım (sanat, mühendislik, ...) bir nesnellik ve öznellik dengesine sahiptir - bazı açık kurallar ve kısıtlamalar, bazı deneyim ve yargılama çağrıları ve hatta tamamen ücretsiz olan tüm seçenekler birbirini seçer.
Steve314

Yanıtlar:


12

İyi bir soru ve sık sık üzerinde duruyordum.

Objektif değil diyebilirim, hayır. Kesinlikle öznel. Sorunları yıkmaya nasıl yaklaştığınız, bu tür problemlere yönelik felsefenize bağlıdır. Bilim bize aynı sorunu etkili bir şekilde çözmenin birçok farklı yolu olabileceğini gösteriyor. Bilim ayrıca, insanların kıtaların birbirlerinden bağımsız olarak aynı çözümleri üretebileceğini gösteriyor ve bu nedenle bazı çözümler diğerlerinden daha açık. Her durumda, çözümleri "en iyi" olarak değerlendirmek kriterlerinize bağlıdır.

Gerçekten, birinin aynı bütünün iki parçası olarak görebileceği, diğeri tamamen ayrı iki kavram olarak görülebilir. Farklı kod kütüphaneleri sahiplerinin aynı soruna nasıl yaklaştıklarına bakıldığında bunu her zaman görüyoruz. Yine de her iki çözüm de gayet iyi çalışıyor.

(PS. OP'nin son sorusu soru başlığının tersini sorarken bu cevabı düzenledi.)


5

İlkenin kendisi nesneldir, ancak prensibi izleyen bir şeyi uygulamanın pek çok farklı yolu vardır, iki bağımsız geliştirici hemen hemen her zaman aynı uygulama için oldukça farklı sistem tasarımları bulur.

Aynı tasarımı iki kez yapan aynı geliştiricinin yine de en azından kısmen farklı olan iki çözüm bulması muhtemeldir.

Sistem tasarımlarının her zaman aynı görünmesine neden olmak için, tasarım kararlarının her yönünü kapsaması gerekir. Tek sorumluluk sorumlusu, herhangi bir sistem tasarımı yapılmasına ilişkin tasarım kararlarının sadece küçük bir bölümünü kapsar.


İyi analiz @Guffa. +1. Her şeyi kapsayan olmamak fikrini sevdim. Evet, SRP size her şeyi tek bir sorundan sorumlu tutmaya çalışmanızı söyler. Ancak size sorumluluk sınırının nerede olduğunu söylemez.
Saeed Neamati

2

İlkenin uygulanması özneldir. Ancak "sübjektif", estetiğin yaptığı gibi "tercihe" eşit değildir.

Belirgin aşırılıklar var. Tam olarak tek bir yönteme sahip bir sınıf, diğer sınıflara seslenmeyen yalnızca birkaç satır kod içeren bir sınıf kesinlikle SRP'yi izliyor. Öte yandan, biri ham soketler aracılığıyla tam bir e-posta uygulaması içeren ve diğeri GUI formu oluşturan diğeri olmak üzere iki yöntem içeren bir sınıf kesinlikle SRP'yi takip etmemektedir .

Estetik zayıf bir benzetmedir. Daha iyi bir benzetme, bağlanma ve uyumun iyi bilinen bilgisayar bilimi kavramları olacaktır . Bunların hiçbiri siyah beyaz, doğru veya yanlış özellikler değildir. Ancak, bunlar şunlardır niteliksel öğe bulunsa bile, ölçülebilir. Bir grup deneyimli geliştiriciye aynı özellik için iki ayrı tasarım gösterirseniz, tasarımın daha fazla bağlantı ve / veya uyuma sahip olduğu benzer okumalar verecektir.

Aslında, SRP aslında sadece işlevsel bir birlikteliktir. Bazı modüllerin (örn. Sınıf) parçalarının birlikte gruplanması gerektiğini, çünkü hepsinin aynı işlevi yerine getirmesine katkıda bulunduğunu ve başka bir nedenden dolayı olmadığını söyler. "İşlev" yoruma tabi olabilir - bazı insanlar bunu kelimenin tam anlamıyla tek bir işlev (veya yöntem veya prosedür) bildirimi olarak yorumlayabilir , diğerleri biraz geri adım atabilir ve bir işlevi "e-posta gönderme" veya "müzik çalma" olarak düşünebilir ancak yine de manevra için çok fazla alan var. "Öğeleri yönetmek" geçerli bir işlevsel açıklama değildir.


0

“Sorumluluğun” “değişim nedeni” olarak nesnel bir tanımı vardır. Programlama sırasında değişmenin tüm nedenleri gelecekte yatmaktadır, bu nedenle programcı sadece deneyimlerine ve alan bilgisine dayanarak tahmin edebilir. Sorumlulukları analiz etmek kısmen öznel olan bir tür tahmindir.


0

SRP nesneldir; uygulamalar özneldir

tam olarak aynı işlevselliğe sahip iki uygulama, tamamen farklı iç yapıları kullanabilir, bu da farklı sınıflar ve yöntemlerle sonuçlanır ve her ikisi de SRP'yi tatmin edebilir

aynı yöntemleri ve durumu kullanırlarsa ve her ikisi de normalize edilirse (minimal / gereksizdir), teoride - SRP altında aynı sınıflar ve yöntemlerle sonuçlanırlar.

ama kanıtlayamıyorum. Hala.

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.