Là ý tưởng tốt hơn để gọi một ứng dụng dòng lệnh bên ngoài hoặc để nội hóa logic của ứng dụng đó?


10

Tôi có một loại quy trình "đường ống" về cơ bản chỉ là liên kết với nhau một loạt các công cụ hiện có để tự động hóa quy trình công việc. Đối với một trong các bước, có một công cụ dòng lệnh hiện có đã thực hiện được những gì mà bước đó cần phải làm.

Công cụ CLI bên ngoài dựa trên java và đường ống của tôi cũng vậy, vì vậy có thể tích hợp công cụ trực tiếp vào bước đường ống, nhưng công cụ này rất phức tạp và hiện đang gắn chặt với việc có đầu vào dòng lệnh (giống như Tùy chọn cờ cấu hình 37).

Câu hỏi là: Có phải là một ý tưởng tốt hơn chỉ đơn giản là gọi ra và gọi quy trình bên ngoài, hoặc sẽ tốt hơn nếu tích hợp mã bên ngoài trong ứng dụng của tôi?

Những ưu / nhược điểm của việc tích hợp so với gọi quy trình bên ngoài là gì?


Là công cụ dòng lệnh là thứ bạn kiểm soát, hoặc được phát triển bởi một bên khác?
whatsisname

Đó là bộ công cụ DIC4che mã nguồn mở (giấy phép Mozilla), do đó nó được phát triển bởi một bên khác, nhưng tôi có thể làm với nó khá nhiều bất cứ điều gì tôi muốn.
cdeszaq

Câu trả lời:


12

Có phải là một ý tưởng tốt hơn chỉ đơn giản là gọi ra và gọi quy trình bên ngoài, hoặc sẽ tốt hơn nếu tích hợp mã bên ngoài trong ứng dụng của tôi?

Nó là tốt hơn nhiều để tích hợp những điều này.

Giao diện dòng lệnh chỉ là một giao diện và đặc biệt khủng khiếp. Điều đó rất cần thiết nhưng nó cũng chứa đầy những điều kỳ quặc và hạn chế không hợp lý.

Mỗi "công cụ hiện có để tự động hóa một quy trình công việc" nên có một lớp gọn gàng thực hiện công việc thực sự sau khi các tùy chọn dòng lệnh đã được phân tích cú pháp.

Lý tưởng nhất là public static void mainhàm thực hiện hai điều trong mỗi một trong những "công cụ hiện có" đó.

  1. Nó gọi một số trình phân tích đối số / tùy chọn dòng lệnh.

  2. Nó gọi lớp gọn gàng mà làm việc thực sự. Hãy nghĩ về một nhiệm vụ Ant hoặc một nhiệm vụ Maven thực hiện công việc thực sự sau khi Ant hoặc Maven đã xử lý tất cả các phân tích cú pháp và ra quyết định.

Khi bạn đi để tích hợp những thứ này, bạn muốn các lớp gọn gàng thực hiện công việc thực sự.

Nếu chúng không tồn tại, thì bạn sẽ phải viết lại tất cả các công cụ đó để tạo lớp gọn gàng thực hiện công việc thực sự, tách biệt với tất cả các phân tích cú pháp dòng lệnh.

Để được hướng dẫn về cách các lớp gọn gàng này hoạt động, hãy đọc Ant (hoặc Maven) để xem cách chúng xác định các nhiệm vụ công nhân khác nhau. Đó là một mô hình tinh thần tốt cho cách nhiều thứ khác nhau được tích hợp mà không quay trở lại dòng lệnh.


Trong trường hợp của tôi, lớp thực hiện công việc là toàn bộ công cụ và chứa mainphương thức, các phương thức phân tích CLI, v.v ... Thật khó chịu :(
cdeszaq

@cdeszaq: Trong trường hợp đó, nó cần được sửa. Nó không phải là một quá trình viết lại cực kỳ khó khăn, và nó phải được thực hiện.
S.Lott

3
Tôi thêm rằng tùy thuộc vào thời hạn của bạn, bạn có thể tích hợp với giao diện CL hiện tại và chuyển sang một giải pháp tích hợp đúng theo thời gian. Nhưng nếu bạn có thời gian để sửa lỗi này ngay bây giờ, thì hãy làm như vậy :-)
Martijn Verburg

1
@MartijnVerburg: Điểm tốt. Thông thường, có một ưu tiên rõ ràng. Một số quy trình công việc được tích hợp chặt chẽ hơn hoặc có khả năng có thể có một mục đích sử dụng riêng như một "quy trình công việc phụ". Điều này có thể dẫn đến tồn đọng của việc làm lại từ giá trị nhất đến giá trị thấp nhất.
S.Lott

Tại nhà tuyển dụng cuối cùng của chúng tôi, chúng tôi đã gặp sự cố khi thực thi exe tiện ích (chúng tôi hoàn toàn không phải mã của tôi). Giúp nhà phát triển "cấp cao" chẩn đoán lý do tại sao exe này không thực thi, tôi đề nghị viết một tập tin dơi để khởi động nó. Nó đã làm việc. Anh ngừng tìm kiếm vấn đề và đó là cách nó đi ra khỏi cửa. Bài học tôi học được là 1. Không bao giờ đề xuất một ý tưởng tồi để khắc phục sự cố cho ai đó đưa ra quyết định. 2. Sử dụng các thư viện hoặc nội hóa logic của riêng bạn càng nhiều càng tốt. Đó là "sửa chữa" chi phí một loạt các hỗ trợ kỹ thuật trên một số máy. Anh ta cũng không tin vào kiểm tra hoặc kiểm soát nguồn nên không có gì bất ngờ ...
Rig

8

Tôi sẽ nói hãy để nó một mình nếu nó hoạt động.

Là một lập trình viên, bạn mang lại giá trị cho tổ chức của mình bằng cách giải quyết các vấn đề với phần mềm. Giải quyết nhiều vấn đề hơn cả về chất lượng và số lượng trong một khoảng thời gian nhất định có liên quan trực tiếp đến giá trị của bạn trong tổ chức. Dành thời gian này để tạo mã làm giảm giá trị của bạn vì nó đưa bạn đi khỏi việc giải quyết một vấn đề quan trọng hơn.

Tuy nhiên, một vài yếu tố có thể giảm thiểu chi tiêu thời gian sẽ là khả năng mở rộng và nếu có bất kỳ mối lo ngại nào cho sự ổn định của các chương trình bên ngoài.


Tôi đồng ý. Bạn có thể gặp nhiều rắc rối khi cố gắng tích hợp các chương trình / mã của bên thứ 3 vào ứng dụng của mình. Đôi khi nó là cần thiết nhưng, như câu nói, "Nếu nó không bị
hỏng

5
Giải quyết vấn đề là rất tốt. Giải quyết một số vấn đề trong khi mở cửa cho các vấn đề khác không phải là quá lớn.
yfeldblum

5

Nó không "tốt hơn" hay "tệ hơn". Đơn giản là có chi phí và lợi ích khác nhau.

Nó thường tốn kém hơn để viết và duy trì một phần mềm, số lượng điểm tích hợp càng lớn đối với độ phức tạp thêm vào.

  • Một chức năng bạn viết có rất ít chi phí tích hợp.
  • Một thư viện bên thứ ba có chi phí tích hợp lớn hơn một chút.
  • Một chương trình riêng biệt bạn phải thực hiện sẽ có và chi phí tích hợp lớn hơn.

Lưu ý đây là các chi phí tích hợp mà bạn phải cân nhắc so với tổng chi phí bao gồm các chi phí khác để viết và bảo trì phần mềm.

Nó có thể là trường hợp bạn là một lập trình viên rất thiếu kinh nghiệm, nhưng là một người sử dụng năng lượng lâu dài.

  • Nếu bạn "bỏ ra" tổng chi phí của bạn có thể thấp mặc dù chi phí tích hợp cao hơn, bởi vì bạn có thể giảm thiểu chi phí tích hợp với kinh nghiệm và kiến ​​thức của mình.
  • Nếu bạn tự viết hàm, tổng chi phí của bạn có thể khá cao mặc dù chi phí tích hợp thấp do lập trình thiếu kinh nghiệm của bạn.

Cách tốt nhất để tìm ra:

Là ý tưởng tốt hơn để gọi một ứng dụng dòng lệnh bên ngoài hoặc để nội hóa logic của ứng dụng đó?

Là để tính toán chi phí cho bản thân. Chi phí sẽ khác nhau cho các môi trường, tình huống và con người khác nhau. Hầu hết thời gian sẽ tốn nhiều tiền hơn để gọi ra dòng lệnh, nhưng không phải lúc nào cũng là cách duy nhất để chắc chắn rằng nó thực hiện phân tích.


Trong trường hợp của tôi, nó thực chất là một ứng dụng bên ngoài tình cờ là nguồn mở và được viết bằng Java, giống như ứng dụng của tôi . Thật không may, không chỉ đơn giản là một thư viện mà ứng dụng bên ngoài sử dụng, vì thư viện đó được gói chặt vào chính giao diện CLI. Khác hơn thế, tất cả các điểm tốt.
cdeszaq

1

Lý tưởng nhất là bạn muốn tích hợp nó. Đặc biệt nếu đây là một ứng dụng được phân phối - giảm số lượng phụ thuộc và cấu hình sẽ giúp việc đó dễ dàng hơn. Nhưng tất nhiên đó là một vấn đề chi phí / lợi ích cho trường hợp cụ thể của bạn.

Điều đó nói rằng, một điều cần xem xét là sự ổn định. Tôi đã gặp một cái gì đó tương tự một vài năm trước đây và giữ chương trình cli tại chỗ. Nó quá không ổn định và tôi không muốn bị sập ứng dụng mẹ, cần chạy 24/7. Bây giờ đây không phải là một ứng dụng java, nhưng không phải là ít hơn, nếu đó là một vấn đề có thể áp dụng, bạn có thể muốn xem xét vấn đề đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.