Bilgi alanımız, çıplak ayaklarıyla bir baskı plakası üzerinde yürüyen insanları içerir. Sensör verilerinde bir insan ayağı tanınırsa, 'Foot' sınıfı nesnelerle sonuçlanan görüntü tanıma yaparız.
Ayağın verilerinde yapılması gereken birkaç hesaplama vardır.
Şimdi, hangi API daha iyi olurdu:
class Foot : public RecognizedObject {
MaxPressureFrame getMaxPressureFrame();
FootAxis getFootAxis();
AnatomicalZones getAnatomicalZones();
// + similar getters for other calculations
// ...
}
Veya:
class Foot : public RecognizedObject {
virtual CalculationBase getCalculation(QString aName);
// ...
}
Şimdi, gelebileceğim birçok profesyonel ve con var, ama hangisinin en önemli olduğuna gerçekten karar veremiyorum. Bu sattığımız bir yazılım kütüphanesi değil, bir son kullanıcı uygulamasıdır.
Herhangi bir tavsiye?
İlk yaklaşım için bazı profesyoneller şunlar olabilir:
- ÖPÜCÜK - her şey çok somut. API, ancak uygulama.
- güçlü yazılan dönüş değerleri.
- bu sınıftan miras kalmayacak bir şey yoktur. Hiçbir şey geçersiz kılınamaz, sadece eklenebilir.
- API çok kapalı, hiçbir şey girmiyor, hiçbir şey geçersiz kılınamıyor, bu yüzden daha az yanlış gidebilir.
Bazı con's:
- Her yeni hesaplama listeye eklendiğinde, alıcı sayısı artacaktır
- API'nın değişme olasılığı daha yüksektir ve son değişikliklerin getirilmesi durumunda yeni bir API sürümüne, Foot2'ye ihtiyacımız vardır.
- sınıfın başka projelerde tekrar kullanılması durumunda her hesaplamaya ihtiyacımız olmayabilir
İkinci yaklaşım için bazı profesyoneller:
- daha esnek
- API'nin değişme olasılığı daha düşüktür (soyutlamayı doğru yaptığımızı varsayarsak, değiştirmenin maliyeti daha yüksektir)
Bazı con's:
- gevşek yazmış. Her çağrıda alınıyor.
- dize parametresi - Bu konuda kötü duygular var (dize değerlerinde dallanma ...)
- Ekstra esnekliği zorunlu kılan mevcut kullanım durumu / gereksinimi yoktur, ancak gelecekte olabilir.
- API kısıtlamalar getirir: her hesaplamanın bir temel sınıftan türetilmesi gerekir. Bu 1 yöntemle bir hesaplama yapmak zorlanacak ve karmaşıklığı daha da artıran parametreleri daha dinamik, süper esnek bir şekilde tasarlamadığımız sürece ekstra parametrelerin geçirilmesi imkansız olacaktır.
getCalculation()
.
enum
ve değerlerini açabilirsiniz . Yine de, ikinci seçeneğin kötü olduğunu düşünüyorum, çünkü KISS'ten sapıyor.