Harici bir komut satırı uygulaması çağırmak veya uygulamanın mantığını içselleştirmek daha iyi bir fikir mi?


10

Ben aslında sadece bir iş akışını otomatikleştirmek için varolan araçların bir demet birbirine bağlayan bir süreç "boru hattı" tür var. Adımlardan biri için, bu adımın yapması gereken şeyin etini zaten yapan mevcut bir komut satırı aracı vardır.

Harici CLI aracı java tabanlıdır ve benim boru hattım da öyle, bu nedenle aracı doğrudan boru hattı adımına entegre etmek mümkün olacak, ancak araç çok karmaşık ve şu anda komut satırı girdisine (şu gibi bir şey) çok yakından bağlı 37 yapılandırma bayrağı seçenekleri).

Soru şudur: Dış işlemi çağırmak ve çağırmak daha iyi bir fikir mi yoksa dış kodu uygulamama entegre etmek daha mı iyi olur?

Dış sürecin entegrasyonuyla çağrılmasının artıları / eksileri nelerdir?


Komut satırı aracı kontrol ettiğiniz bir şey mi, yoksa başka bir tarafça mı geliştirilmiş?
whatsisname

Bu açık kaynak (Mozilla lisansı) dcm4che DICOM araç seti, bu yüzden başka bir parti tarafından geliştirildi, ancak ne istersem hemen bunu yapabilirim.
cdeszaq

Yanıtlar:


12

Harici işlemi çağırmak ve çağırmak daha iyi bir fikir mi yoksa harici kodu uygulamama entegre etmek daha mı iyi olur?

Öyle çok bunları entegre etmek daha iyi.

Komut satırı arabirimi yalnızca bir arabirimdir ve özellikle korkunç bir arabirimdir. Bu önemlidir, ancak mantıklı olmayan tuhaflıklar ve sınırlamalarla da doludur.

"Bir iş akışını otomatikleştirmek için mevcut araçların" her birinde , komut satırı seçenekleri ayrıştırıldıktan sonra gerçek işi yapan düzenli bir sınıf bulunmalıdır .

İdeal olarak, public static void mainfonksiyon "mevcut araçların" her birinde iki şey yapar.

  1. Bazı komut satırı seçeneğini / bağımsız değişken ayrıştırıcısını çağırır.

  2. Gerçek işi yapan düzenli sınıfı çağırır. Ant veya Maven tüm ayrıştırma ve karar alma süreçlerini ele aldıktan sonra gerçek işi yapan bir Ant görevini veya Maven görevini düşünün.

Bunları birleştirmeye gittiğinizde, gerçek işi yapan düzenli sınıfları istersiniz.

Eğer yoksa, tüm komut satırı ayrıştırmasından ayrı olarak, gerçek işi yapan düzenli sınıfı oluşturmak için tüm bu araçları yeniden yazmanız gerekir.

Bu düzenli sınıfların nasıl çalışması gerektiğine dair rehberlik için, çeşitli işçi görevlerini nasıl tanımladıklarını görmek için Ant (veya Maven) bölümünü okuyun. Komut satırına geri dönmeden çoklu, farklı şeylerin nasıl entegre edildiğine dair iyi bir zihinsel modeldir.


Benim durumumda, işi yapan sınıf tüm araçtır ve mainyöntemi, CLI-ayrıştırma yöntemlerini, vb.
İçerir.

@cdeszaq: Bu durumda, düzeltilmesi gerekiyor. Bu çok zor bir yeniden yazma değil ve yapılması gerekiyor .
S.Lott

3
Son teslim tarihlerinize bağlı olarak, mevcut CL arayüzüyle entegre olabileceğinizi ve zamanla düzgün bir şekilde entegre edilmiş bir çözüme bağlanabileceğinizi de ekleyeceğim. Ama şimdi düzeltmek için zamanınız varsa, o zaman :-)
Martijn Verburg

1
@MartijnVerburg: İyi nokta. Genellikle açık bir öncelik vardır. İş akışının bazıları daha sıkı bir şekilde tümleşiktir veya potansiyel olarak "alt iş akışı" olarak ayrı bir kullanıma sahip olabilir. Bu, en değerli olandan en az değerli olana kadar bir yeniden çalışma birikimine yol açabilir.
S.Lott

Son işverenim bir yardımcı program exe yürütme ile ilgili bir sorun vardı (biz ama benim kod hiç değil). "Kıdemli" geliştirici neden bu exe yürütmek değil teşhis yardımcı olmak için bir yarasa dosyası başlatmak için önerdi. İşe yaradı. Sorunu aramayı bıraktı ve bu nasıl kapıdan çıktı. Öğrendiğim ders 1. Karar veren birine sorun gidermek için asla kötü bir fikir önermeyin. 2. Kütüphaneleri kullanın veya kendi mantığınızı mümkün olduğunca içselleştirin. Bu "düzeltme" bazı makinelerde bir dizi teknik desteğe mal olur. Ayrıca test veya kaynak kontrolüne inanmadı, bu yüzden sürpriz olmadı ...
Rig

8

Çalışırsa yalnız bırak diyebilirim.

Bir programcı olarak, yazılımla ilgili sorunları çözerek kuruluşunuza değer katmış olursunuz. Belirli bir süre içinde hem kalite hem de miktar açısından daha fazla problemi çözmek, kuruluştaki değerinizle doğrudan ilgilidir. Kod oluşturmak için bu zamanı harcamak, daha önemli bir sorunu çözmenize gerek kalmayacağından değerinizi azaltır.

Bununla birlikte, zaman geçirmeyi azaltabilecek birkaç faktör ölçeklenebilirlik ve harici programların istikrarı için herhangi bir endişe varsa olacaktır.


Katılıyorum. Uygulamanıza 3. taraf programlarını / kodunu entegre etmeye çalışırken çok fazla sorun yaşayabilirsiniz. Bazen bu gerekli, ancak söyleyişine göre, "Eğer
kırılmazsa

5
Sorunları çözmek harikadır. Diğer sorunlara kapıyı açarken bazı problemleri çözmek o kadar da iyi değil.
yfeldblum

5

"Daha iyi" veya "daha kötü" değildir. Sadece farklı maliyetler ve faydalar vardır.

Eklenen karmaşıklığa entegrasyon noktalarının sayısı arttıkça, bir yazılım parçası yazmak ve sürdürmek genellikle daha pahalıdır.

  • Yazdığınız bir işlevin çok az entegrasyon maliyeti vardır.
  • Üçüncü taraf bir kütüphanenin entegrasyon maliyeti biraz daha yüksektir.
  • Yürütmeniz gereken ayrı bir program ve daha da yüksek entegrasyon maliyeti olacaktır.

Bunların, diğer şeylerin yanı sıra yazılım yazma ve bakım maliyetini de içeren toplam maliyete karşı tartmanız gereken entegrasyon maliyetleri olduğunu unutmayın.

Çok tecrübesiz bir programcı, ancak uzun süre güç kullanıcısı olabilirsiniz.

  • Daha yüksek entegrasyon maliyetine rağmen toplam maliyetiniz düşük olabilir, çünkü deneyim ve bilginizle entegrasyon maliyetini azaltabilirsiniz.
  • Eğer fonksiyonu kendiniz yazacak olsaydınız, deneyimsizlik programlamanız nedeniyle düşük entegrasyon maliyetine rağmen toplam maliyetiniz oldukça yüksek olabilir.

Anlamanın en iyi yolu:

Harici bir komut satırı uygulaması çağırmak veya uygulamanın mantığını içselleştirmek daha iyi bir fikir mi?

Maliyetleri kendiniz hesaplamaktır. Maliyet farklı ortamlar, durumlar ve insanlar için farklı olacaktır. Çoğu zaman komut satırını çağırmak daha pahalıya mal olur, ancak her zaman değil ve analiz yapmak için emin olmanın tek yolu.


Benim durumumda, bir dış uygulama temelde olur açık kaynak ve tıpkı Java dilinde yazılmış olması benim uygulamada. Ne yazık ki, orada değil o kütüphane kendisi arayüzü CLI içine sıkıca paketlenmiş edildiğinden bir kütüphane dış uygulama kullanımları sadece. Bunun dışında tüm iyi noktalar.
cdeszaq

1

İdeal olarak onu entegre etmek istersiniz. Özellikle bu, dağıtılan bir uygulama ise - bağımlılık ve yapılandırma sayısını azaltmak bunu kolaylaştıracaktır. Ama tabii ki özel durumunuz için bir maliyet / fayda sorunu.

Bununla birlikte, dikkate alınması gereken bir şey istikrardır. Birkaç yıl önce benzer bir şeyle karşılaştım ve cli programını yerinde tuttum. Çok dengesizdi ve onun çökmesini 7/24 çalıştırmak için gereken ana uygulamayı aşağı çekmek istemiyordum . Şimdi bu bir java uygulaması değildi, ama hiçbiri daha az, onun geçerli olabilecek bir sorun göz önünde bulundurmak isteyebilirsiniz.

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.