Ayrılma REST'te KURU mu?


19

Varolan bir Java API'sinin işlevlerinin çoğunu ortaya çıkarmak için bir REST API oluşturuyorum. Her iki API da kuruluşumda dahili kullanım içindir; Harici kullanım için tasarım yapmak zorunda değilim. Her iki API üzerinde de etkim var ancak REST'i uyguluyorum. Java API yerel uygulamalar için kullanılmaya devam edecektir ("kullanımdan kaldırılmamaktadır"), ancak REST API önemli yeni geliştirmeler için kullanılacaktır.

Bazı Java API sınıfları sadece veridir (özellikli fasulye, alıcılar, ayarlayıcılar). Ve bunların en azından bir kısmı (bazı biçimlerde) REST API'sı üzerinden veri (XML veya JSON olarak biçimlendirilecek) olarak iletilmesi mantıklıdır. Örneğin, bir sunucu makinesi hakkında bilgi depolayan bir sınıf. Bu veri sınıfları için aşağıdaki seçenekle karşı karşıyayım: Ben ...

  1. orijinal Java sınıfını (veya bir alt sınıfı) doğrudan REST API'sinde gösterme veya
  2. REST API için özel olarak yeni bir veri aktarım sınıfı (DTO modeli) oluşturuyor musunuz?

Her iki şekilde de REST veri aktarım sınıfları olacak; soru, orijinallerin açıklanması veya yenilerinin oluşturulması (orijinallerin kopyalarının yakınında olabilir). Başka seçenekler de olabilir, ama ben esas olarak bu ikisine odaklanacağım.

# 1 için bağımsız değişkenler:

  • KURU (kendini tekrar etme)
  • Uygulaması daha hızlı
  • REST API'sını yükseltmek daha kolay

# 2 için bağımsız değişkenler:

  • REST API'sının Java API'sından ayrı olarak sürümlendirilmesi gerekirse ne olur? (Bu biraz muhtemel.)
  • Java veri sınıflarında özellik kaldırma, davranış ekleme veya sınıf hiyerarşisinde değişiklikler gibi önemli değişiklikler varsa ne olur? (Bu da biraz muhtemel.)

Alt satırda, DRY (# 1) ile ayırma (# 2) arasında bir dengeye benziyor.

# 1 ile başlamaya yöneliyorum ve daha sonra # 2'ye geçmede problemler ortaya çıkarsa, ihtiyacınız olanı kanıtlayamayacağınız şeyleri inşa etmemenin çevik rehberini takip ediyorum. Bu kötü bir fikir mi; Ben yine de orada olabilir düşünüyorum # 2 ile başlamak gerekir?

Listelerimde eksik olan büyük tartışmalar / sonuçlar var mı?


PragProg'u hatırlarsam, gerçekten KURU olan şey , Java sınıfı VE dto'nun oluşturulduğu tek bir kaynağa sahip olmak olacaktır .
AakashM

"Ya eğer" = YAGNI IMO
Jonathan Cast

Yanıtlar:


10

İyi soru, basitçe söylemek gerekirse, ayrıştırın. Buraya gitmenin yolu, java sürümüne bağlı olmak istemezsiniz.

Ayrıştırmamanız gereken bir senaryo var: eğer teknolojiniz tipe özgü olmayan nesnelerin tel üzerinden gönderilmesine izin verecekse, yani şu anki java nesnelerini şimdi YAGNI olarak kullanabilir ve yerine farklı bir Özelleştirdiğiniz tür, kablo üzerinden geçen tür bilgileri nedeniyle hiçbir şeyi bozmayacak basit bir açılır pencere olacaktır. Yani, temel olarak tip bilgisi kabloyu geçmezse, bu konuda YAGNI yapabilirsiniz.

Java sürümünüzde yapılan yükseltmelerin bu nesnelerin hiçbirini değiştirmemesine çok dikkat edin ve dikkatli olun. Aksi takdirde sadece şimdi ayrıştırın ve endişelenmeyin, sanırım bir seçeneğiniz varsa ne kadar zamanınız olduğuna bağlıdır.

Bununla birlikte, tip bilgisi protokolünüzde kablo üzerinden geçerse, altta yatan java türleri değiştiğinde yeni türlerin düz bir şekilde bırakılması mümkün olmayabilir ve daha büyük bir çaba olabilir. Eğer durum buysa, YAGNI'ye gitmek artık temel teknolojinizle ilgili teknik borç ve risk biriktirmek demektir.

Şahsen ben şimdi ayrılırdım.

Ayrıca, DRY bunu yapmaz, çünkü altta yatan parçaları yazmadınız, bu yüzden kodu çoğaltmıyorsunuz ve bu nedenle DRY'nin ana endişesi olan (ve genel sürdürülebilirlik) her zaman tekrarlanan hataların ağrılarına sahip olmayacaksınız. korumak için yinelemeleriniz olmadığı için tekrar sahip olmayacağınız sorunlar)


7

# 1 için ana argümanlar uygulama ve yükseltmelerin kolaylığıdır, ancak gereksinimlerinizi karşılar mı?

# 2 için olan argümanlarınızda, Java API ve REST API'nin bağımsız olarak değişebileceğini belirtiyorsunuz. Bu, onların ayrı kaygılar olduğu ve ayrı sınıflar kullanarak kendinizi tekrar etmediğiniz anlamına gelir. İki şey aynı görünüyor diye, onlar anlamına gelmez vardır aynı.


6

REST API'nizin veri modelinizle aynı yapıyı izlemesi gerekmez

REST'i uygularken, sezgisel bir harici API oluşturduğunuzdan emin olun ve ardından bunu dahili veri modeli sınıflarınızla eşleyin. Bu, on yıllarca sürebilecek API'lara yönlendiren birbirinden bağımsız olarak değiştirmenize olanak tanır .

Bu nedenle, ayırma buraya gitmenin yoludur.

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.