Saya sering melihat orang mengatakan bahwa perangkat lunak tertentu "sangat keras pendapatnya" atau bahwa Microsoft cenderung menulis kerangka kerja "tidak berpandangan keras". Apa arti sebenarnya?
200
Saya sering melihat orang mengatakan bahwa perangkat lunak tertentu "sangat keras pendapatnya" atau bahwa Microsoft cenderung menulis kerangka kerja "tidak berpandangan keras". Apa arti sebenarnya?
Jawaban:
Jika suatu kerangka kerja dikemukakan pendapat, kerangka itu mengunci atau menuntun Anda ke dalam cara mereka melakukan sesuatu.
Sebagai contoh: beberapa orang percaya bahwa sistem template seharusnya tidak menyediakan akses ke metode dan fungsi yang ditentukan pengguna karena membuat sistem terbuka untuk mengembalikan HTML mentah. Jadi pengembang kerangka kerja yang berpendapat hanya memungkinkan akses ke struktur data. Secara desain, perangkat lunak ini membatasi dan mendorong perancang melakukan berbagai hal dengan cara mereka.
Contoh lain ( diambil dari tautan sinyal ) adalah wiki . Para perancang wiki punya banyak pendapat. Mereka menganggap HTML terlalu rumit untuk ditulis orang, jadi mereka menemukan apa yang menurut mereka merupakan cara yang lebih alami untuk memperbarui konten. Mereka juga menanggalkannya dari desain mewah karena mereka merasa fokus seharusnya lebih pada konten daripada desain.
Apple memiliki pendapat yang kuat ketika mendesain produknya.
Desain perangkat lunak tanpa pendapat lebih mirip PERL / PHP. Ini memungkinkan pengembang dan mempercayai pengembang untuk membuat keputusan yang tepat dan menempatkan lebih banyak kontrol di tangan mereka.
Saya juga akan menempatkan Microsoft di kolom tanpa pendapat. Sebuah contoh yang baik dari kerangka Microsoft yang un-opininated:
.NET
. Dengan membuka CLR dan spesifikasi, itu membukanya untuk semua jenis bahasa dan gaya implementasi.sumber
Perangkat lunak yang disetujui berarti bahwa pada dasarnya ada satu cara (cara yang benar ™) untuk melakukan sesuatu dan mencoba melakukannya secara berbeda akan sulit dan membuat frustrasi. Di sisi lain, melakukan hal-hal dengan cara yang benar ™ dapat membuatnya sangat mudah untuk dikembangkan dengan perangkat lunak karena jumlah keputusan yang harus Anda buat berkurang dan kemampuan perancang perangkat lunak untuk berkonsentrasi dalam membuat perangkat lunak bekerja meningkat. Perangkat lunak yang disarankan bisa sangat bagus untuk digunakan, jika dilakukan dengan baik, jika masalah Anda memetakan solusi dengan baik. Ini bisa sangat menyakitkan untuk menyelesaikan bagian-bagian dari masalah Anda yang tidak dipetakan ke alat yang disediakan. Contoh di sini adalah Ruby on Rails.
Perangkat lunak yang tidak memiliki pendapat, di sisi lain, memberikan banyak fleksibilitas kepada pengguna (pengembang). Itu tidak melarang satu metode penyelesaian masalah, tetapi menyediakan alat yang fleksibel yang dapat digunakan untuk memecahkan masalah dalam banyak cara. Kelemahan dari hal ini adalah karena alat ini sangat fleksibel, mungkin relatif sulit untuk mengembangkan solusi apa pun. Jauh lebih banyak dari solusi mungkin harus dikodekan oleh pengguna (pengembang) karena kerangka kerja tidak memberikan cukup bantuan. Anda juga harus berpikir lebih banyak tentang bagaimana memberikan solusi dan pengembang yang biasa-biasa saja mungkin berakhir dengan solusi yang lebih buruk daripada jika mereka membeli ke beberapa perangkat lunak yang memiliki pendapat. PERL mungkin adalah contoh klasik dari perangkat lunak yang tidak memiliki pendapat.
Cita-cita saya adalah kerangka kerja tanpa pendapat, tetapi kerangka kerja dengan konvensi yang kuat. Saya akan memasukkan ASP.NET MVC dalam kategori ini. Pada kenyataannya, semua perangkat lunak memiliki pendapat tertentu (meskipun mungkin bukan PERL). MVC memiliki konvensi yang kuat dalam pilihan modelnya tetapi menawarkan banyak cara berbeda untuk menyelesaikan masalah dalam konvensi tersebut. Beberapa cara itu bahkan dapat merusak model. Namun, digunakan dengan benar, sesuai dengan konvensi yang berkembang dalam kerangka kerja seperti itu, bisa menjadi kesenangan nyata.
sumber
Ini pada dasarnya adalah perangkat lunak yang berfungsi seperti yang menurut pengarangnya berfungsi, alih-alih mencoba menyenangkan semua orang. Itu berarti banyak orang tidak akan menyukainya, tetapi orang yang melakukannya akan menyukainya.
Rails mungkin adalah contoh kanonik dari kerangka kerja yang dikemukakan: Anda melakukan sesuatu dengan caranya sendiri, dan semuanya lancar. Jika tidak, Anda akan kesakitan. Tapi tidak apa-apa - jika Anda tidak ingin melakukan hal-hal dengan cara mereka, Anda tidak ingin menggunakan Rails.
sumber
Demi keseimbangan, saya akan memberikan uraian (lebih banyak pendapat) yang lebih disukai untuk pendekatan yang disarankan (berbeda dengan beberapa jawaban lainnya).
Kerangka kerja yang diberi pendapat memberikan "jalur emas", yang seharusnya menjadi praktik terbaik bagi kebanyakan orang dan sebagian besar skenario (di mata para penulis).
Namun ini tidak berarti terkunci. Ini berarti bahwa mungkin diperlukan upaya ekstra untuk melakukan berbagai hal secara berbeda.
Kerangka kerja yang kurang memiliki pendapat memberikan sejumlah opsi berbeda dan menyerahkannya kepada Anda untuk memutuskan.
Kerangka kerja yang disarankan biasanya menghilangkan beban dari pengembang untuk menemukan kembali roda atau memikirkan kembali masalah yang sama berulang-ulang dan dengan demikian membantu fokus pada masalah nyata yang ada.
Di dunia open-source, Anda dapat menemukan banyak kerangka kerja yang memiliki pendapat namun bersaing, sehingga Anda masih punya pilihan. Anda hanya harus memilih jalur emas Anda sendiri.
sumber
Perangkat lunak yang dibuat dibuat dan dirancang sedemikian rupa sehingga membuatnya mudah untuk melakukan sesuatu dengan cara tertentu. Ini mendukung pola desain tertentu lebih dari yang lain. Dalam proses itu membuatnya sulit untuk menyimpang dari gaya pengembangan perangkat lunak yang dikembangkannya. Cara lain untuk menyatakannya adalah bahwa ia lebih menyukai "Konvensi alih konfigurasi". yaitu opsi konfigurasi sangat terbatas karena perangkat lunak mengasumsikan banyak aspek konfigurasi. Perangkat lunak yang disarankan biasanya lebih cepat dikuasai setelah asumsi dipahami.
Sebaliknya, perangkat lunak yang tidak terbuka membuat beberapa asumsi. Dan sebagai hasilnya, kerangka kerja pengembangan perangkat lunak / perangkat lunak yang tidak terbuka sering cenderung memiliki banyak opsi konfigurasi. Pengembang biasanya harus membuat banyak keputusan tentang berbagai aspek perangkat lunak. Seringkali, berbagai alat dikembangkan untuk mempermudah penanganan opsi-opsi besar ini. mis. Visual Studio .NET untuk .NET, Eclipse IDE untuk Java, dll. Perangkat lunak yang tidak terbuka biasanya membutuhkan waktu lebih lama untuk dikuasai daripada perangkat lunak yang disarankan.
sumber
tl; dr :
sumber
Banyak orang merujuk ASP.NET MVC sebagai kerangka kerja "tidak terbuka", dan saya hanya ingin mempertimbangkan dengan beberapa pemikiran tentang itu.
Memang benar bahwa ASP.NET MVC tidak mandat terlalu banyak; Anda dapat menggunakan solusi ketekunan apa pun yang Anda suka, baik itu Linq-to-SQL, Entitas ADO.NET, NHibernate, dll.
Di sisi lain, kerangka kerja MVC cenderung lebih menyukai "konvensi atas konfigurasi", mengutip Phil Haack, yang sangat menyarankan mengikuti pola yang telah ditentukan sebelumnya untuk menemukan pengendali, pandangan, model dan kode lainnya. Meskipun Anda dapat mengubah perilaku ini, lebih mudah untuk berenang dengan arus, dan bagi kebanyakan orang, tidak ada masalah melakukan hal itu.
Juga seputar ASP.NET MVC banyak orang yang berpendapat, yang saya temukan mengarah ke banyak tutorial bias yang bersikeras untuk meliput, misalnya pengujian unit dan injeksi ketergantungan; Saya semua untuk pengujian yang baik dan pemisahan kekhawatiran, tetapi saya merasa bahwa topik-topik seperti itu ditekan sedikit, sering kali sebelum membahas dasar-dasar yang lebih berguna.
Di sana lagi, saya harus mengakui bahwa di dalam area tersebut, kerangka itu sendiri sepenuhnya terbuka untuk mengadopsi solusi pengujian unit apa pun yang Anda inginkan, serta kerangka ketergantungan injeksi dan mengejek apa pun yang ingin Anda gunakan, jadi saya kira itu memberikan contoh lain dari fleksibilitas, bahkan dalam "bashing bashing" dari pengujian unit, dll. yang tampaknya sedang terjadi.
sumber
Ini adalah jumlah konvensi yang diterapkan dalam bingkai dan jumlah keputusan yang telah diambil.
Jika, misalnya, ada 5 (atau lebih) cara berbeda untuk mengirimkan data formulir ke tindakan pengontrol (yang merupakan kasus dalam ASP.NET MVC), kerangka kerja tersebut tampaknya cukup "tidak memiliki pendapat" - keputusannya sudah habis kepadamu!
Namun, jika kerangka kerja memungkinkan (baik secara langsung menonaktifkan cara lain, atau dengan sangat mendorongnya) hanya satu cara melakukan hal itu (yang merupakan kasus dengan Fubu MVC), Anda dapat mengatakan bahwa keputusan telah diambil oleh kerangka kerja , dengan demikian membuat kerangka kerja itu menjadi pendapat.
sumber
Contoh Anda akan melihat banyak saat ini adalah kerangka ASP.NET MVC. Itu luar biasa bisa diperluas tetapi itu adalah kejatuhannya dalam beberapa hal, tidak ada daging untuk itu. Ingin melakukan akses data? Anda harus menulisnya sendiri. Ingin beberapa AJAX terjadi? Dito.
Namun, karena sangat mudah dikembangkan, jika Anda membangun di atasnya Anda dapat mengubahnya menjadi kerangka kerja yang beralasan. Inilah yang suka dilakukan MVCContrib , mereka memberi Anda metode khusus dalam melakukan sesuatu yang berarti Anda harus menulis lebih sedikit kode.
Ini berarti bahwa jika Anda ingin melepaskan diri dari pendapat tersebut, seringkali ada lebih banyak pekerjaan yang harus dilakukan daripada jika Anda mengerjakan versi vanilla. Ini adalah skenario 80/20. Jika Anda memilih kerangka pendapat Anda dengan benar, Anda hanya ingin melepaskan diri dari pendapat 20% dari waktu dan Anda akan sangat produktif 80% lainnya dari waktu.
sumber