Saya melakukan banyak pengembangan di waktu saya sendiri. Proyek-proyek yang saya kerjakan ini semua hanya untuk bersenang-senang dan belajar (sejauh ini). Saya biasanya melakukan pengembangan Java dengan Maven tetapi saya juga dikenal berkecimpung di .NET dan Python. Semua proyek yang saya kerjakan menggunakan lisensi open source, meskipun kebanyakan dari mereka tidak pada repositori kode publik.
Pengembangan Java / Maven mengharuskan saya untuk menggunakan struktur unik groupId
(mis. "Com.mydomain") dan unik package
(direktori), biasanya berisi pengembangan groupId
sementara .NET mendorong keunikan namespaces
di mana saya menggunakan konvensi serupa dengan package
konsep Java . Untuk memastikan keunikan, saya biasanya hanya menggunakan salah satu nama domain saya dengan bagian yang dibalik (mis. "Ca.jessewebb"); Saya percaya ini adalah praktik yang sangat umum.
Saya sedang dalam tahap awal membuat proyek Java / Maven, open source, baru (sebut saja "newproj") dan saya ingin meletakkannya di GitHub. Username saya di GitHub itu "jessewebb" jadi ini akan memberikan URL seperti: https://github.com/jessewebb/newproj
. Saya tidak ingin repot mendaftarkan nama domain "newproj.com" jadi saya memutuskan untuk menggunakan "ca.jessewebb" dan "ca.jessewebb.newproj" sebagai groupId
dan package
, masing-masing.
Terpikir oleh saya bahwa keberadaan identitas pribadi saya dalam kode dan sebagai bagian dari rumah proyek (di URL GitHub) kemungkinan akan menyebabkan kontributor potensial untuk berpikir dua kali untuk terlibat dengan proyek saya. Ini masalah, saya tidak ingin itu menjadi proyek saya . Saya lebih suka jika saya bisa, sebagai gantinya, menyampaikan pesan bahwa saya tidak memiliki proyek. Sekarang, dalam semua kejujuran, itu sebenarnya bukan masalah besar karena saya ragu proyek saya akan mengumpulkan banyak keterlibatan masyarakat tetapi saya juga melihat ini sebagai alasan yang lebih besar untuk menghindari kemungkinan menghalangi calon kontributor.
Sebagai contoh lain, saya membuat proyek Google Code beberapa tahun yang lalu (sebut saja "oldproj"). Ketika saya membuat proyek, saya tahu saya akan meng-host-nya di Google Code jadi saya menggunakan groupId
dan mengemas nama "com.googlecode.oldproj", yang merupakan kebalikan dari nama domain default yang disediakan Google Code pada setiap proyek baru. Ini ternyata bukan ide yang terlalu bagus; setahun atau lebih kemudian, saya memindahkan kode ke repo yang berbeda dan saya harus mengganti nama pengidentifikasi ini (baik saya tidak punyauntuk tetapi ...). Pada saat itu, saya tidak memiliki nama domain dan akhirnya saya membeli nama domain "oldproj.com" dan saya menggunakannya. Saya suka ini karena memberi proyek identitasnya sendiri dan saya tidak mencap nama saya pada kode di mana-mana. Saya bisa saja dengan mudah mendaftarkan nama domain "jessewebb.ca" dan menggunakan "ca.jessewebb.oldproj" sebagai nama paket, tetapi saya tidak melakukannya karena saya mempunyai masalah yang sama saat itu juga.
Jadi pertanyaan saya adalah ...
Bagaimana saya bisa menghindari menggunakan nama (domain) saya sendiri saat membuat proyek sumber terbuka sambil tetap mempertahankan keunikan paket / ruang nama?
Sebagai proyek mendapatkan momentum lebih, masuk akal untuk mendaftarkan nama domain tetapi tampaknya konyol dan buang-buang uang untuk melakukan ini sebelumnya. Saya menyadari bahwa saya sebenarnya tidak harus memiliki nama domain untuk menggunakannya dalam kode tetapi itu terasa salah dan dapat menyebabkan penghuni liar mengambilnya dari bawah Anda sementara itu. Apa yang dilakukan orang lain tentang dilema ini? Apakah ada contoh proyek sumber terbuka populer (digunakan secara luas, komunitas besar, dll.) Yang berisi identitas pengembang asli sebagai bagian dari pengidentifikasi sendiri?
sumber
Jawaban:
Dalam proyek saya, saya memberi mereka nama tetapi tidak harus domain. Jadi nama paket saya (dan ruang nama) biasanya hanya "projectname.libraryname", terlepas dari mana kode tersebut diinangi.
Saya terbiasa dengan .NET di mana handeled ini cukup bebas.
sumber
Saya tidak ingat di mana saya melihatnya, tetapi saya melihatnya menyarankan untuk menggunakan struktur seperti ini:
Identifier Anda dapat berupa domain yang Anda miliki, alias internet Anda (yang cukup unik), dll. Nama komponen tidak digunakan untuk kode "inti" produk Anda. Misalnya, saya memiliki kerangka kerja MVC kecil bernama BarelyMVC, jadi saya memiliki ruang nama seperti ini di dalamnya:
dll. alias online Anda dalam banyak kasus sangat unik untuk menghindari konflik antara pengembang lain
Jika Anda takut menggunakan alias daring sendiri, buat sendiri "label" untuk diri sendiri. Tidak harus terdaftar secara resmi sebagai perusahaan atau apa pun (atau bahkan domain). Misalnya,
Json.Net
perpustakaan populer menggunakan namespaceNewtonsoft.Json
. Ini jelas didasarkan pada nama belakang penulis "newton", tapi saya tidak berpikir ada yang benar-benar peduli tentang itu. Dan jika Anda memiliki perusahaan resmi terdaftar, maka Anda tentu saja dapat menggunakannya. Sebagian besar API publik yang diproduksi oleh perusahaan saya misalnya memiliki ruang nama yang diawali denganPreEmptiveSolutions
, nama perusahaansumber
Tidak ada aturan bahwa nama paket Java atau .NET namespaces menjadi nama domain. Bahkan tidak ada persyaratan bahwa mereka harus unik, meskipun itu pasti Ide yang Bagus. Saya benar-benar berpikir Anda benar untuk digunakan
com.googlecode.oldproj
, dan di sepatu Anda, saya tidak akan beralih kecom.oldproj
kecuali saya mencoba untuk mendapatkan publisitas untuk nama domain baru.sumber
com.googlecode.oldproj
, mengapa kamu pikir ini adalah ide yang bagus? Dalam retrospeksi, saya pikir itu agak konyol untuk mengikat kode ke penyedia hosting.