Domain pengetahuan kami melibatkan orang-orang yang berjalan di atas piring penekan tekanan dengan kaki telanjang. Kami melakukan pengenalan gambar yang menghasilkan objek dari kelas 'Kaki', jika kaki manusia dikenali dalam data sensor.
Ada beberapa perhitungan yang harus dilakukan pada data kaki.
Sekarang, API mana yang lebih baik:
class Foot : public RecognizedObject {
MaxPressureFrame getMaxPressureFrame();
FootAxis getFootAxis();
AnatomicalZones getAnatomicalZones();
// + similar getters for other calculations
// ...
}
Atau:
class Foot : public RecognizedObject {
virtual CalculationBase getCalculation(QString aName);
// ...
}
Sekarang, ada banyak pro dan kontra yang bisa saya buat, tapi saya tidak bisa memutuskan mana yang paling penting. Catatan, ini adalah aplikasi pengguna akhir, bukan perpustakaan perangkat lunak yang kami jual.
Ada saran?
Beberapa pro untuk pendekatan pertama dapat:
- CIUMAN - semuanya sangat konkret. API, tetapi implementasinya juga.
- nilai pengembalian sangat diketik.
- mewarisi dari kelas ini adalah bukti bodoh. Tidak ada yang bisa ditimpa, hanya ditambahkan.
- API sangat tertutup, tidak ada yang masuk, tidak ada yang bisa ditimpa, jadi lebih sedikit yang bisa salah.
Beberapa con:
- Jumlah getter akan bertambah, karena setiap perhitungan baru yang kami temukan akan ditambahkan ke daftar
- API lebih cenderung berubah, dan jika memecah perubahan diperkenalkan, kita membutuhkan versi API baru, Foot2.
- dalam hal penggunaan kembali kelas di proyek lain, kita mungkin tidak perlu setiap perhitungan
Beberapa pro untuk pendekatan kedua:
- lebih fleksibel
- api lebih kecil kemungkinannya untuk berubah, (dengan asumsi kita mendapatkan abstraksi yang benar, jika tidak, perubahan akan lebih mahal)
Beberapa con:
- diketik dengan longgar. Membutuhkan gips pada setiap panggilan.
- parameter string - Saya punya firasat buruk tentang itu (bercabang pada nilai string ...)
- Tidak ada use case / persyaratan saat ini yang mengamanatkan fleksibilitas ekstra, tetapi mungkin ada di masa depan.
- API memberlakukan batasan: setiap perhitungan harus berasal dari kelas dasar. Mendapatkan perhitungan akan dipaksa melalui metode 1 ini, dan melewati parameter tambahan tidak akan mungkin, kecuali jika kita merancang cara yang lebih dinamis, super-fleksibel untuk melewatkan parameter yang meningkatkan kompleksitas bahkan lebih.
getCalculation()
.
enum
dan mengaktifkan nilainya. Tetap saja, saya pikir pilihan kedua adalah jahat, karena menyimpang dari KISS.