2010-08-20 26 views
9

Bạn thực sự có thể bỏ qua phần đầu tiên này vì nó gây nhầm lẫn, nhưng tôi sẽ giữ nó ở đây vì tôi muốn biết nếu có ai khác cảm thấy như vậy. Tôi là một sinh viên CS đã từng sử dụng Java trong 3 năm và tôi vẫn cảm thấy khó hiểu được cách đưa chức năng chính vào thiết kế của mình. Nó cảm thấy sai khi đặt nó trong một lớp tất cả trên riêng của mình, nhưng nó cũng cảm thấy sai khi chèn nó vào một tập tin lớp học. Tôi thấy thứ hai như vậy bởi vì nó không phù hợp với phần còn lại của lớp làm cho nó incohesive. Tôi không thể chỉ dính một hàm chính vào đối tượng DocumentReader của tôi, ví dụ. Nó sẽ không liên quan gì tới vật thể. Mặt khác, tôi không thể chỉ tạo ra một lớp Main mà chỉ có một chức năng chính bên trong nó bởi vì trong lập trình hướng đối tượng, bạn phải suy nghĩ về các đối tượng có hiệu quả tạo ra một thế giới thu nhỏ trong đầu của bạn. Đối với thế giới thu nhỏ đó xoay quanh một vật thể duy nhất không làm gì ngoài việc tồn tại, dường như có vẻ không ổn. Nó không hoạt động như một người kể chuyện và nhân vật trong một câu chuyện bởi vì nó không làm gì, cùng một lúc. Tôi thích phong cách của C có chức năng chính tách biệt với mọi thứ. Nó giữ câu chuyện của câu chuyện tách biệt với các nhân vật đang tương tác với nhau.Làm cách nào để kết hợp chức năng chính của Java vào thiết kế của bạn?

Tôi muốn biết các chuyên gia kết hợp phương pháp chính vào phần còn lại của mã của họ như thế nào. Làm thế nào để bạn làm cho nó phù hợp với phần còn lại của thiết kế. Ngoài ra, chúng thường dài hay ngắn?

+0

Tôi muốn giữ phương pháp chính của mình càng ngắn càng tốt và xây dựng đối tượng phức tạp trong các nhà máy. – helpermethod

Trả lời

5

Tôi giữ chức năng main() trong lớp có tên là dự án của tôi. Với điều này khi bạn khởi chạy ứng dụng dòng lệnh bạn gõ:

java com.domain.project.ApplicationName 

Dường như với tôi logic để có một tên Launcher đơn giản hơn là:

java com.domain.project.AClassWhichDoesntLookLikeAMainClass 

hoặc (quá) cổ điển

java com.domain.project.Launcher 

Nhưng đừng bận tâm quá nhiều cho lớp này, nó có thể sẽ không bao giờ được thực thi bởi người dùng cuối như thế này. Một tập lệnh hoặc một tệp thực thi khác sẽ khởi chạy hầu hết thời gian.

Một điều nữa, phương thức main() của bạn có thể trở nên nặng nề, đặc biệt nếu bạn thực sự sử dụng các arg chính cho nhiều tùy chọn CLI hơn. Có lẽ nó xứng đáng với lớp riêng của nó.

+1

99% thời gian Tên dự án = Tên ứng dụng – TheLQ

+0

Có, nhưng vì lợi ích 1%, bạn nên nói rõ ràng 'project.ApplicationName', ngay cả khi nó thừa khi tên dự án = tên ứng dụng. –

4

Vâng, đôi khi tôi muốn tạo một lớp học *Application và đặt ở đó. Đối với DocumentReader, tôi có một DocumentReaderApplication nơi tôi sẽ đặt chức năng chính và cũng có thể xử lý bất kỳ tùy chọn khởi động/đối số dòng lệnh nào. Nếu đó là ứng dụng GUI, lớp *Application sẽ khởi chạy cửa sổ chính. Xét cho cùng, điểm vào của chương trình phải ở đâu đó, đúng không?

4

Lớp học có phương pháp chính đóng vai trò là điểm vào. Vì vậy, bạn nên đặt mọi thứ trong lớp đó, cụ thể là rằng điểm nhập. Ủy quyền phần còn lại.

0

Tôi để nó trong một lớp học Program, nơi nó sẽ được tất cả một mình. Nó thường chỉ đá bắt đầu cửa sổ chính của tôi sau đó thoát khi cửa sổ thoát.

2

Phương pháp chính chỉ được sử dụng khi bạn tự khởi động ứng dụng độc lập. Thế giới đang di chuyển ra khỏi điều này cho các ứng dụng lớn đơn giản chỉ vì chúng phát triển quá lớn nên bạn cần phải mô đun hóa.

Các phương pháp chung là WAR/EAR cho Java EE và gói OSGi.

3

Lõi cứng Người OOP có thể không thích điều này, nhưng tôi chỉ có một lớp được gọi là Main trong gói dự án gốc của tôi chứa phương pháp chính.

Suy nghĩ của tôi là chương trình của bạn cần phải bắt đầu ở đâu đó, nhưng đặt nó vào một lớp khác chỉ là khó hiểu. Tôi coi Main() là một trường hợp đặc biệt xứng đáng với lớp học của riêng mình. Tôi không đặt gì khác ngoài thông tin thiết lập trong lớp này. Điều này làm cho nó rõ ràng rằng đây là điểm khởi đầu (và đôi khi là điểm kết thúc) của toàn bộ chương trình của tôi.

+0

Tôi cũng làm như vậy. –

2

Tôi làm việc trong phát triển web Java và có nhiều năm.

Tôi chưa bao giờ nhập một cách chuyên nghiệp các từ "public static void main".

Giữa nhiệm vụ kiến ​​kích hoạt kiểm tra đơn vị và các tác vụ cục bộ khác, sau đó triển khai lưu trữ WAR vào máy chủ, phương pháp chính không nằm trong phạm vi hoạt động của web.

0

Giữ mã tối thiểu trong phương thức main(). Sử dụng Ủy quyền, vì nó giúp địa phương hóa vấn đề của bạn trong trường hợp có lỗi. Nếu bạn thêm logic nghiệp vụ hoặc thậm chí là mã giao diện người dùng trong lớp Chính của bạn hoặc phương thức main(), nó có xu hướng phát triển. Điều này áp dụng cho phương pháp tiếp cận hướng đối tượng cũng như lập trình thủ tục.

0

Tôi bao gồm một phương pháp chính trong mọi lớp khác có thể có một số hành vi độc lập hợp lý và chỉ dành cho mục đích thử nghiệm đơn giản.

Các vấn đề liên quan