Projelerimden birinde de gördükten ve üzerinde çalıştıktan sonra bu kullanıma karşı bir cevap vermeye çalışacağım.
Kod okunabilirliği
Her şeyden önce, kod okunabilirliğinin önemli olduğunu ve bu uygulamanın buna ters olduğunu düşünün. Birisi bir parça kod okur ve diyelim ki bir işlevi var doSomething(Employee e)
. Bu artık okunabilir değil, çünkü Employee
farklı paketlerdeki 10 farklı sınıf nedeniyle , girdinizin gerçekte ne olduğunu öğrenmek için önce ithalat beyanına başvurmanız gerekecektir.
Bununla birlikte, bu üst düzey bir görünümdür ve çoğu zaman kimsenin umursamadığı, hatta bulduğu rastgele isim çatışmaları var, çünkü anlamı kalan koddan ve hangi pakette olduğunuzdan türetilebilir. yerel olarak hiçbir sorun yoktur, çünkü Employee
bir hr
paketin içinde görürseniz , çalışanın İK görünümünden bahsettiğimizi bilmeniz gerekir.
Bu paketleri terk ettiğiniz anda işler dağılıyor. Farklı bir modül / paket / vb. Çalıştıktan ve bir çalışanla çalışmanız gerektiğinde, türünü tam olarak nitelemiyorsanız okunabilirlikten zaten ödün vermiş olursunuz. Ayrıca, 10 farklı Employee
sınıfa sahip olmak, IDE'nizin otomatik tamamlanmasının artık çalışmadığı ve çalışan türünden manuel olarak seçim yapmanız gerektiği anlamına gelir.
Kod çoğaltma
Bu sınıfların her birinin doğası gereği birbiriyle ilişkili olduğundan, çoğaltma nedeniyle kodunuzun bozulması gerekir. Çoğu durumda, her bir sınıfın uygulamak zorunda olduğu bir çalışanın adı veya bir kimlik numarası gibi bir şeye sahip olacaksınız. Her sınıf kendi görüşünü eklese de, temeldeki çalışan verilerini paylaşmazlarsa, o zaman büyük kitleler yararsız, ama pahalı kodlarla karşılaşacaksınız.
Kod karmaşıklığı
Ne sorabilirsiniz ki bu kadar karmaşık olabilir? Sonuçta, sınıfların her biri istediği kadar basit tutabilir. Gerçekten sorun haline gelen şey, değişiklikleri nasıl yaydığınızdır. Oldukça zengin özelliklere sahip bir yazılımda, çalışan verilerini değiştirebilirsiniz - ve bunu her yere yansıtmak isteyebilirsiniz. Bir bayan sadece evli olduğunu söyle ve onu adlandırmak zorunda X
içinY
bu nedenle. Bunu her yerde yapmak için yeterince zor, ama tüm bu farklı sınıflara sahip olduğunuzda daha da zor. Diğer tasarım seçeneklerinize bağlı olarak, bu, sınıfların her birinin kendi tür dinleyicisini veya değişikliklerden haberdar edilecek bir şeyi uygulaması gerektiği anlamına gelebilir - bu da temel olarak uğraşmanız gereken sınıf sayısına uygulanan bir faktöre dönüşür . Ve elbette daha fazla kod çoğaltma ve daha az kod okunabilirliği. Bu gibi faktörler karmaşıklık analizinde göz ardı edilebilir, ancak kod tabanınızın boyutuna uygulandığında rahatsız edici.
Kod iletişimi
Tasarım seçenekleriyle de ilgili olan kod karmaşıklığı ile ilgili yukarıdaki sorunların yanı sıra, üst düzey tasarım netliğinizi azaltır ve alan adı uzmanlarıyla düzgün iletişim kurma yeteneğini kaybedersiniz. Mimariyi, tasarımları veya gereksinimleri tartışırken artık basit ifadeler yapmakta özgür değilsiniz given an employee, you can do ...
. Bir geliştirici artık employee
o noktada gerçekten ne anlama geldiğini bilemeyecek . Her ne kadar bir alan adı uzmanı bunu bilecek olsa da. Hepimiz yapıyoruz. bir çeşit. Ancak yazılım açısından artık iletişim kurmak o kadar kolay değil.
Problemden nasıl kurtulurum
Bunun farkında olma ve sonra eğer ekibiniz mücadele için bir sorun yeterince büyük olduğunu kabul eder, o zaman başa bir şekilde dışarı işe sahip olacaktır. Genellikle, yöneticinizden çöpü çıkarabilmeleri için tüm ekibe bir hafta izin vermesini isteyemezsiniz. Yani özünde, bu sınıfları birer birer kısmen ortadan kaldırmak için bir yol bulmanız gerekecek. Bunun en önemli kısmı - tüm ekiple - Employee
gerçekten ne olduğuna karar vermektir . Do not tek tanrı-çalışanın bireysel özelliklerin hepsi entegre. Daha çok çekirdek çalışanı düşünün ve en önemlisi bu Employee
sınıfın nerede kalacağına karar verin .
Kod incelemeleri yaparsanız, sorunun en azından daha fazla büyümediğinden emin olmak özellikle kolaydır, yani başka bir tane Employee
daha eklemek istediklerinde herkesi kendi yolunda durdurun . Ayrıca, yeni alt sistemlerin kararlaştırılanlara uymasına Employee
ve eski sürümlere erişmesine izin verilmemesine dikkat edin.
Programlama dilinize bağlı olarak, sonunda ortadan kaldırılacak sınıfları, @Deprecated
ekibinizin değiştirilmesi gereken bir şeyle çalıştıklarını hemen fark etmelerine yardımcı olmak gibi bir şeyle işaretlemek de isteyebilirsiniz .
Eski çalışan sınıflarından kurtulmak için, her bir vaka için en iyi nasıl ortadan kaldırılacağına karar verebilir veya sadece ortak bir kalıp üzerinde anlaşabilirsiniz. Sınıf adını iliştirebilir ve gerçek çalışanın etrafına sarabilir, desenleri (dekoratör veya adaptör akla gelir) veya veya veya kullanabilirsiniz.
Uzun bir hikaye kısaca anlatmak gerekirse: Bu "uygulama" teknik olarak sağlamdır, ancak yalnızca yolun ilerisinde gerçekleşecek gizli maliyetlerle doludur. Sorundan hemen kurtulamayabilirsiniz, ancak zararlı etkilerini içererek hemen başlayabilirsiniz.