Saya berasal dari latar belakang OO yang kuat, dan saya baru-baru ini mulai bekerja di sebuah organisasi yang, walaupun kode ini ditulis di Jawa, memiliki penekanan yang jauh lebih sedikit pada desain OO yang baik daripada apa yang biasa saya lakukan. Saya telah diberitahu bahwa saya memperkenalkan "terlalu banyak abstraksi", dan bahwa saya harus mengkode cara yang selalu dilakukan, yang merupakan gaya prosedural di Jawa.
TDD juga tidak banyak dipraktekkan di sini, tetapi saya ingin memiliki kode yang dapat diuji. Mengubur logika bisnis dalam metode privat statis dalam "kelas-Tuhan" yang besar (yang tampaknya menjadi norma untuk tim ini) tidak terlalu dapat diuji.
Saya berjuang dengan jelas dalam mengkomunikasikan motivasi saya kepada rekan kerja saya. Adakah yang punya saran tentang bagaimana saya bisa meyakinkan rekan kerja saya bahwa menggunakan OO dan TDD mengarah ke kode yang lebih mudah dikelola?
Pertanyaan tentang hutang teknis ini terkait dengan pertanyaan saya. Namun, saya mencoba untuk menghindari timbulnya hutang di tempat pertama, sebagai lawan dari membayarnya setelah fakta yang meliputi pertanyaan lain.
sumber
Jawaban:
Anda tidak mengeluh bahwa itu tidak dapat dipelihara, hanya saja tidak sesuai dengan keinginan Anda. Jika itu adalah pilihan gaya yang disengaja, itu mungkin hanya kasus perbedaan kreatif yang tidak dapat didamaikan, dan Anda harus menyesuaikan gaya Anda agar sesuai, atau menemukan tempat yang sesuai dengan gaya pilihan Anda.
Orang dapat dan memang menulis kode modular, efisien, abstrak, relatif bebas bug dalam gaya prosedural sepanjang waktu. Java adalah pilihan bahasa yang aneh untuk toko seperti itu, tetapi saya dapat melihatnya terjadi jika faktor eksternal memutuskan bahasa tersebut, seperti perlu dikembangkan untuk Android, misalnya.
Jika itu pilihan yang disengaja, Anda tidak bisa benar-benar menilai mereka dengan seberapa baik mereka mematuhi prinsip-prinsip desain berorientasi objek yang baik, Anda harus menilai dengan seberapa baik mereka mematuhi prinsip-prinsip desain prosedural yang baik, dan juga refactor sesuai. Java tidak membiarkan Anda menulis kode di luar kelas, jadi keberadaan satu saja tidak berarti mereka menginginkan modul berorientasi objek.
Di sisi lain, jika kodenya berantakan di kedua paradigma, Anda mungkin harus memotong kerugian Anda.
sumber
Membaca pertanyaan Anda, saya ingat satu ujung buku Program Pragmatis.
Salah satu tipsnya adalah
Be a Catalyst for Change
:Jadi, saya pikir Jika Anda mulai melakukan pekerjaan dengan baik dengan pengetahuan OO dan TDD Anda, segera mereka akan mulai mencari dan bertanya tentang pekerjaan Anda.
sumber
Untuk menjual cara baru bekerja, Anda harus menunjukkan manfaat yang jelas. Menulis lebih banyak lapisan abstraksi, tanpa manfaat yang jelas tetapi samar: "itu bisa bermanfaat untuk masa depan" tidak akan berhasil.
Buat pabrik tempat pabrik membuat lebih dari satu jenis objek. Gunakan injeksi ketergantungan, yang langsung menunjukkan manfaat. Membuat antarmuka yang sebenarnya akan diimplementasikan oleh lebih dari satu kelas.
Apa yang saya lihat terlalu sering dalam "OO sejati" adalah bahwa teknik-teknik canggih digunakan untuk memecahkan masalah yang sangat sederhana dengan cara yang terlalu rumit.
Bagaimana Anda bisa menunjukkan manfaat pabrik jika hanya akan membuat objek yang sama? Temukan masalah dalam kode Anda yang mendapat manfaat dari teknik-teknik canggih dan menunjukkan poin Anda dan bekerja dari sana.
Perang dimenangkan satu pertempuran pada satu waktu.
sumber
Anda hanya dapat meyakinkan mereka dengan mengambil sejumlah kecil kode dan menerapkan TDD dan praktik OO yang lebih baik untuk merealisasikan manfaatnya. Anda telah mengarahkan mereka ke tanah yang dijanjikan, bukan hanya menunjukkan kartu pos yang bagus.
Tentu saja, saya pikir ada banyak kasus abstraksi yang digunakan di banyak basis kode saat ini. Hanya memasukkan apa yang Anda butuhkan, dan itu termasuk abstraksi juga.
sumber