Apakah perangkat lunak yang disarankan?

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?

zvolkov
sumber

Jawaban:

206

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.

cgp
sumber
18
Saya tidak akan mengatakan "mengunci Anda", tetapi itu tidak membuatnya mudah untuk menyimpang dari jalur "emas". Jalur emas biasanya merupakan praktik terbaik, sesuatu yang harus bekerja untuk sebagian besar orang sebagian besar waktu.
dpan
5
Saya setuju kunci sedikit kuat, tetapi saya akan menghilangkan konotasi negatif dengan mencatat seberapa sukses banyak produk yang dikemukakan.
cgp
32
Yah, sudah jelas bahwa jawaban ini
dikemukakan
6
Kerangka kerja yang diberi pendapat adalah kerangka kerja yang dirancang sedemikian rupa sehingga penggunanya akan mengalami paling sedikit perbedaan dengan kerangka kerja itu ketika kerangka kerja digunakan dengan cara yang tidak melanggar asumsi yang dibuat oleh perancang kerangka kerja.
Crippledsmurf
2
Saya setuju dengan altCognito. .NET mendorong pengembang untuk mencampur Model dan Tampilan dalam aplikasi WinForms dengan membuatnya sangat mudah untuk menempatkan logika bisnis dalam metode yang dihasilkan oleh acara klik tombol, misalnya. Dengan cara ini, Microsoft secara tidak langsung mendorong pengembang jangka pendek untuk mengunci kode mereka ke dalam kerangka kerja mereka. Desain yang lebih bersih akan menegakkan atau mendorong praktik yang lebih baik, seperti memaksa metode klik tombol untuk memanggil fungsi kedua dengan logika Model, dalam modul terpisah. Bukan berarti desain bersih tidak dapat dicapai dalam. NET, hanya saja tidak didukung secara default.
Jared Updike
62

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.

tvanfosson
sumber
22

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.

Rytmis
sumber
1
Saya setuju dengan ini .... Saya memiliki satu perangkat lunak yang disetujui ... dan ini disetujui karena ini adalah proyek kecil kesayangan saya ... Saya tidak tahu itu akan diadopsi secara luas ... beberapa menyukainya, yang lain mengeluh .. tetapi mereka semua mengerti itu adalah proyek kesayangan saya
TimothyP
8

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.

dpan
sumber
1
+1, Terasa seperti aplikasi perusahaan yang Anda sebutkan. Siebel memiliki jalur emas yang tidak mudah rusak, meskipun bisa dilakukan dan saya bekerja pada tim yang melakukannya sesekali. Ini dapat membuat pengembangan bergerak lebih cepat karena Anda tidak harus mengembangkan elemen UI, penyimpanan data, dan logika bisnis sepanjang waktu.
J. Polfer
5

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.

Kunal
sumber
5

tl; dr :

  • Opini : mis. Ruby on Rails . Ada satu cara yang sangat disukai untuk melakukan sesuatu, dan Anda mendapatkan banyak dukungan dalam melakukan hal-hal seperti itu. Melakukan hal-hal dengan cara lain itu sulit, atau untuk beberapa sistem tidak mungkin (Cassandra datang ke pikiran).
  • Tidak berpandangan : misalnya Perl 5 . Anda dapat melakukan apapun yang Anda suka, apa pun yang Anda suka, dengan gaya apa pun. Semua gaya sama-sama terbuka, valid, dan didukung.
00rometheus
sumber
3

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.

rampok
sumber
2

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.

mookid8000
sumber
1

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.

Garry Shutler
sumber
ASP.NET MVC tampaknya secara alami cocok dengan kerangka kerja ASP.NET AJAX, dan bahkan menyertakan tambahan khusus MVC ke perpustakaan itu, jadi saya tidak setuju bahwa pilihan implementasi Ajax sepenuhnya tidak bias. Juga, perpustakaan tidak secara khusus mengamanatkan atau bahkan merekomendasikan jue dari jQuery, tetapi itu bundel itu, memberi isyarat diam-diam ke arah itu sambil mengucapkan, "lihat ini".
Rob