Bu yüzden son zamanlarda benim kod bazı büyük refactorings yaptı. Yapmaya çalıştığım ana şeylerden biri, sınıflarımı veri nesnelerine ve çalışan nesnelere ayırmaktı. Bu, diğer şeylerin yanı sıra, Temiz Kod'un bu bölümünden ilham aldı :
Melezler
Bu karışıklık bazen yarı nesne ve yarı veri yapısı olan talihsiz hibrit veri yapılarına yol açar. Önemli şeyler yapan işlevleri vardır ve ayrıca tüm değişkenler ve amaçlar için özel değişkenleri herkese açık hale getiren ve bu değişkenleri prosedürel bir programın kullanacağı şekilde kullanmaya teşvik eden genel değişkenler veya kamu erişimcileri ve mutasyonları vardır. veri yapısı.
Bu melezler yeni işlevler eklemeyi zorlaştırır, aynı zamanda yeni veri yapıları eklemeyi zorlaştırır. Onlar her iki dünyanın da en kötüsü. Onları oluşturmaktan kaçının. Yazarlar, işlevlerden veya türlerden korunmaya ihtiyaç duyup duymadıklarından emin değil veya daha da kötüsü olan karışık bir tasarımın göstergesidir.
Son zamanlarda ( Ziyaretçi Desen uygulamak için olur) benim işçi nesnelerin birine kod bakıyordu ve bunu gördüm:
@Override
public void visit(MarketTrade trade) {
this.data.handleTrade(trade);
updateRun(trade);
}
private void updateRun(MarketTrade newTrade) {
if(this.data.getLastAggressor() != newTrade.getAggressor()) {
this.data.setRunLength(0);
this.data.setLastAggressor(newTrade.getAggressor());
}
this.data.setRunLength(this.data.getRunLength() + newTrade.getLots());
}
Hemen kendime dedim ki "kıskançlık! Bu mantık Data
sınıfta olmalı - özellikle handleTrade
yöntemde. handleTrade
Ve hep birlikte updateRun
olmalı ". Ama sonra "veri sınıfı sadece bir veri yapısı, bunu yapmaya başlarsam, o zaman bir Hibrit Nesne olacak!" Diye düşündüm .public
Daha iyi olan nedir ve neden? Hangisini yapacağınıza nasıl karar veriyorsunuz?