Swing kullanarak Java'da bir okul grubu projesine başlıyorum. Veritabanı masaüstü uygulamasında basit bir GUI.
Profesör bize geçen yılki projenin kodunu verdi, böylece işleri nasıl yaptığını görebildik. Benim ilk izlenim kod olması gereken çok daha karmaşık olmasıdır, ama programcılar sadece yazmadım koda bakarken sık sık bunu düşünüyorum.
Sisteminin iyi veya kötü olmasının nedenlerini bulmayı umuyorum. (Profesöre sordum ve daha sonra neden daha iyi olduğunu göreceğimi söyledi, bu da beni tatmin etmiyor.)
Temel olarak, onun devam eden nesneleri, modelleri (iş mantığı) ve görünümleri arasında herhangi bir birleşmeyi önlemek için, her şey dizelerle yapılır. Veritabanında saklanan persistable nesneler dizelerin karma vardır ve modeller ve görünümler birbirlerine abone olurlar, abone oldukları "olaylar" için dize anahtarları sağlarlar.
Bir etkinlik tetiklendiğinde, görünüm veya model, o etkinlik için ne yapılacağına karar veren tüm abonelerine bir dize gönderir. Örneğin, görünümler eylem dinleyici yöntemlerinden birinde (bunun sadece bicycleMakeField öğesini persistable nesneye ayarladığına inanıyorum):
else if(evt.getSource() == bicycleMakeField)
{
myRegistry.updateSubscribers("BicycleMake", bicycleMakeField.getText());
}
Bu çağrı en sonunda Araç modelinde bu yönteme ulaşır:
public void stateChangeRequest(String key, Object value) {
... bunch of else ifs ...
else
if (key.equals("BicycleMake") == true)
{
... do stuff ...
Profesör, bu tür şeyler yapmanın, görüşün bir iş mantığı nesnesine bir yöntem çağırmasından daha genişletilebilir ve sürdürülebilir olduğunu söylüyor. Görüşler ve modeller arasında bir eşleşme olmadığını, çünkü birbirlerinin varlığını bilmediklerini söylüyor.
Bence bu daha kötü bir eşleştirme türüdür, çünkü görünüm ve model çalışmak için aynı dizeleri kullanmak zorundadır. Bir görünümü veya modeli kaldırır veya bir dizede yazım hatası yaparsanız, derleme hatası almazsınız. Ayrıca kod olması gerektiğini düşündüğümden çok daha uzun yapar.
Bunu onunla tartışmak istiyorum, ancak deneyimsiz öğrenci olarak benim yapabileceğim herhangi bir tartışmaya karşı koymak için endüstri deneyimini kullanıyor. Benim yaklaşımımın kaçırdığım bir avantajı var mı?
Açıklığa kavuşturmak için, yukarıdaki yaklaşımı, görüşün modele açıkça bağlı olmasıyla karşılaştırmak istiyorum. Örneğin, araç modeli nesnesini görünüme aktarabilir ve ardından aracın "markasını" değiştirmek için şunları yapabilirsiniz:
vehicle.make = bicycleMakeField.getText();
Bu, SADECE aracın markasını tek bir yerde okunabilir tek bir kod satırına ayarlamak için şu anda kullanılan 15 kod satırını azaltacaktır. (Ve bu tür bir işlem uygulama boyunca yüzlerce kez yapıldığından, okunabilirlik ve güvenlik için büyük bir kazanç olacağını düşünüyorum.)
Güncelleme
Takım liderim ve ben, çerçeveyi statik yazarak nasıl yapmak istediğimizi yeniden yapılandırdık, profesörü bilgilendirdik ve bir demo verdik. Ondan yardım istemediğimiz sürece ve ekibimizin geri kalanını hızlandırabiliyorsak, bu bizim için adil görünüyor, çerçevemizi kullanmamıza izin verecek kadar cömert.