Ayrıştırılmış mimariler oluşturmak için paketleri (mücevherler, yumurtalar, vb.) Kullanma


10

Ana konu

En modern programlama platformları paket yönetimi (düşünmek için sahip iyi destek görünce gem, npm, pipböylece teşvik etmek ve bir gevşek bağlı bir mimari oluşturmak için, dahili olarak geliştirilen paketlerin oluşur bir uygulama veya sistem tasarımı için anlamlı mı, vs.)?

Misal

Buna bir örnek, veritabanı erişimi, kimlik doğrulama ve sistemin diğer bileşenleri için paketler oluşturmak olabilir. Bunlar elbette harici paketleri de kullanıyor. Ardından, sisteminiz kodlarını kendi kod tabanına eklemek yerine bu paketleri alır ve kullanır.

hususlar

Bana göre, bunun kod ayrışmasını teşvik edeceği ve neredeyse Web tabanlı-masaüstü-uygulama-uygulama türünde (güncellemeler neredeyse otomatik olarak uygulanıyor, tek işlevsellik için tek kod tabanı, vb.)

Bu rasyonel ve akılcı bir tasarım konsepti gibi mi görünüyor? Bu aslında günümüzde uygulamaları yapılandırmanın standart bir yolu olarak mı kullanılıyor?

Yanıtlar:


12

Şimdi iki kez böyle projelerde yer aldım (her ikisi de .NET ile nuget kullanıyor) ve dengede iyi bir fikir olduğunu söyleyebilirim . Ancak kilometreniz değişebilir.

Bir dakika için her derde deva olduğunu, tüm sorunlarınızı yenilerine neden olmadan çözeceğini düşünmeyin. Sürüm yönetimi yepyeni bir karmaşıklık katmanı kazanacak, daha önce varlığını bilmediğiniz sürüme bağımlılık sorunları ile uğraşmanız gerekecek ve dört farklı paketi yükseltmeniz gerektiğinden kararınızı kestiğiniz zamanlar olacak . hızlı bir şekilde düzeltmeniz ve serbest bırakmanız gereken küçük bir hata.

Öte yandan, bir şeyleri güzelce ayırdığı konusunda haklısınız. Eğer aşırıya kaçmadıkça, "oh, bu iyi çalıştı" düşündüğünüz zaman daha fazla fırsat bulacaksınız "çok çaba ekledi." Birden fazla uygulama arasında paylaşılan kodunuz varsa, uygulamalarınızı bağımsız olarak kolayca yükseltebileceğiniz için özellikle etkilidir.

Ve benim gibi bir şeyseniz, hata bulma işleminizden tüm uygulama katmanlarını kaldırmak için paketlerinizi kullanan test uygulamalarını hızlı bir şekilde yazmaya başlayacaksınız. Ve bu, kendi başına, maliyetlerden daha fazla olabilir.


Harika giriş. Genel olarak, her şey dengelenmelidir ve yorumunuzun bu satırlarda nasıl kaldığını seviyorum. Daha fazla durumda iyi çalışma eğiliminde olduğunu düşündüğünüzü duymak harika ... ve sorunların ortaya çıkması yine de sabit. Test uygulamaları hakkında ipucunu seviyorum :). +1.
Juan Carlos Coto

1
Bunu * nix dünyasında da yapan birçok proje var. Genellikle ön uçlardan gui'nin geliştirme kaynaklarından vb. Ayrılmış kütüphaneleri vardır.
David Cowden

İlginç. Karmaşık bir sistemi organize etmenin güzel bir yolu gibi görünüyor, ancak bunun aşırı mühendislik olmasından korkuyordum. Dikkatli uygulanırsa öyle olmamalıdır. Teşekkürler!
Juan Carlos Coto

3

Sonuçta bu iyi bir fikir. İstemediğiniz veya yapamayacağınız paketleri saklayabilmeniz için dahili bir paket deposu (genellikle Java dünyasında "yapay nesne deposu" veya Python dünyasında "pypi sunucusu" olarak adlandırılır) kurmayı düşünmeniz gerekir. t Açık kaynak olarak serbest bırakma.

@Pdr'ın belirttiği gibi, bazı paketlerdeki bir değişikliğin önce başka bir pakette başka bir değişiklik gerektirdiği kendi bağımlılık cehenneminize hazırlıklı olun ve bu sadece bir kod satırını değiştirmek değil, aynı zamanda test etmek, muhtemelen değişiklikleri kabul etmek anlamına gelir, bir sürüm oluşturmak ve sürümü yukarıda belirtilen paket havuzuna yüklemek. Sonra ne değişiyor amaçlanan değişime.

Bunu denemek ve en aza indirmek için deneyimlerimden verebileceğim tek reçete: sadece paketlerinizden ortak kavramları bir "ortak" veya "çerçeve" paketine soyutlamaya güvenmeyin . Bu çok objektif bir şey gibi görünebilir, ancak sık sık, muhtemelen çelişkili değişikliklere ve sürümlere ihtiyaç duyan bir canavar paketine yol açacaktır. Çok daha iyi, sisteminizdeki işlevleri düşünün ve sorunuzda belirttiğiniz gibi her biri için bir yardımcı paket oluşturun.

Bunun yanı sıra, elde edeceğiniz temel fayda, uygulamalarınızın (birçok) bağımlılıktan yalıtıldığı, böylece onları acı çekmeden değiştirebilirsiniz.


Mükemmel ipucu. Bir commonpaketi bir seçenek olarak görmedim , ama dediğin gibi, gelecekte "makul" bir karar haline geldiğini görebiliyordum. Amacım kod yerine bileşenlerin çizgisindeydi - bu yüzden ideal olarak farklı şeylerde aynı şeyi yapan çok fazla kod parçasına sahip olmamalısınız, çünkü farklı şeyler yapmak içindir. Paketler arasında ortaklıklar varsa, bu tür tekrarların iyi programlama ilkelerini ihlal etmeyeceğini tahmin ediyorum, çünkü projeler tanım gereği ayrıdır.
Juan Carlos Coto
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.