Son zamanlarda, şirketimdeki neredeyse tüm kaynak kodlarını tek bir çözüme taşıdık.
Neden?
Başlangıçta onlarca çözümümüz vardı. Bir çözümün bazı projeleri başka bir projeyi yeniden kullandı ve kimse bir paket yöneticisi kullanma konusunda umursamadı. Neredeyse her yerde kullanılan bir projeyi önemli ölçüde değiştirdiğiniz gün, önümüzdeki günler veya haftalar boyunca tüm şirket için saatler ve saatler süren iş kaybı bekler. En kötü yanı, değişiklikten tam olarak neyin etkileneceğini bile bilemezsiniz .
Tüm kodu tek bir çözümde birleştirmek bir alternatifti. Şu an için iyi çalışıyor ve bağımlılıkları takip etmek artık çok kolay. Bir yöntemi değiştirmek ama aynı zamanda bu değişikliğin kod tabanının herhangi bir yerinde olabileceği yansımaları izlemek mi istiyorsunuz? Visual Studio bunu kolaylıkla yapabilir. Benim için bu bir başarı.
Sürekli entegrasyon da artık daha kolay. Derlemek ve dağıtmak için tek bir çözüm. Neredeyse yapılandırılacak bir şey yok.
Ölçeklenebilir mi?
Performans açısından Visual Studio beni çok şaşırttı . 50 proje ile bir çözümle ağlamaya başlayacağını düşündüm. Bugün 200'den fazla proje var; Visual Studio, bunları sadece 20 tane varmış gibi yönetecek kadar ölçeklenebilir görünüyordu. Evet, zaman alan şeyler var. Her projeyi yeniden kodlarsanız, Kod sözleşmeleri, Varsayılan olarak etkinleştirilmiş Kod analizi vb. İle, biraz zaman almasını bekleyin. Ancak hiç kimse 200 projeyi 10 kadar hızlı derlemeyi bekleyemez ve bu arada yapmamalısınız: Bu, Sürekli entegrasyon sunucusunun rolüdür. Başlangıç zamanı (soğuk başlatma, ardından çözeltiyi yükleme) etkileyici bir şekilde hızlıdır ; belki 10 projede olduğu kadar hızlı değil, ama yine de çok kabul edilebilir (beş yıldan fazla bir süre önce satın alınan bir makinede 20 saniyenin altında).
Daha da ileriye gitmek için, sistematik olarak boşaltma projeleri iyi bir fikirdir (ve projeler çözüm içindeki dizinlerde düzenlendiğinde gerçekten kolaydır). Birisi sadece üç projenin yüklenmesini gerektiren bir şey üzerinde çalışırsa, 200 projenin tümünü yüklemeye gerek yoktur (tabii ki bağımlılıklar etkilenmeyebilirse).
Sürüm kontrolü de beklendiği gibi çalışıyor (önemliyse bir SVN sunucusu kullanıyorum). Örneğin, sık sık kod işleyen düzinelerce geliştirici ile gerçek bir eşzamanlı ortamda çalışmadım, ancak bunun çok fazla sorunu olmayacağını hayal ediyorum. Birçok geliştiricinin aynı anda yeni projeler eklediği durumlara dikkat edin: .sln dosyasını birleştirmek en kolay şey değildir.
Sonuç
Kararı tekrar seçmem gerekirse:
Yine de her şeyi tek bir çözüme taşıyacağım. Bu, kırık bağımlılıkların acısını büyük ölçüde azaltır ve bu fayda tek başına buna değer. Tüm kodlar için merkezi bir yere sahip olmak da iyi bir fikirdir; bu, örneğin, Visual Studio'da bir şey aramayı mümkün kılar. Zayıf şekilde ilişkili iki projede de çalışabilirim ve yine de yalnızca bir Visual Studio penceresi açtım.
Ayrıca biraz daha NuGet ve özel bir NuGet sunucusu barındırma yeteneği üzerinde çalışacaktım. NuGet aracılığıyla bağımlılıkları yönetmek, birkaç projeyi ortak çözümle birleştirmek istemediğinizde bazı sorunları çözebilir. Şahsen, böyle davalarım yoktu, ama diğer şirketlerin de olabileceğini hayal ediyorum.
Son olarak, her geliştirici için bir SSD'ye yatırım yapmak büyük bir fark yaratabilir. Ama gerek yok ve benim durumumda, kod tabanı hala sıradan bir sabit diskte saklanıyor.