2008-10-03 30 views
13

Gần đây tôi đã bị phơi nhiễm với các vật thể trần truồng. Nó trông giống như một khuôn khổ khá tốt. Tuy nhiên tôi không thấy nó trong việc sử dụng rộng rãi như nói, Spring. Vậy tại sao khuôn khổ này không nhận được bất kỳ tín dụng ứng dụng chính thống nào. Những thiếu sót của nó như bạn thấy là gì?Đối tượng khỏa thân. Tốt hay xấu

+0

Liên kết đã bị hỏng. Xem http://www.nakedobjects.org/ –

+1

Các đối tượng Naked Objects for Java ban đầu hiện được tích hợp hoàn toàn trong dự án Apache Isis: http://isis.apache.org/. Phiên bản .NET, hoạt động rất tích cực, giờ đây đã hoàn toàn mã nguồn mở và trên codeplex: https://nakedobjects.codeplex.com/ –

Trả lời

9

Từ kinh nghiệm của tôi sử dụng NOF 3.0.3 ...

Ưu điểm:

  • automagically tạo ra một giao diện người dùng Chia sẽ cho các đối tượng tên miền của bạn, giống như những gì db4o làm cho persistence.
  • Đây là những gì MVC luôn có ý nghĩa, theo người tạo mẫu MVC.
  • Khung làm việc chỉ yêu cầu các đối tượng miền của bạn (POJO) được phân lớp từ AbstractDomainObject thats tất cả các hệ thống dây điện tối thiểu.
  • Khuôn khổ ủng hộ cấu hình OVER quy ước: nhiều chú thích không làm hỏng các cấu hình XML giles.
  • Hoạt động tốt để tạo mẫu cùng với db4o để duy trì sự bền bỉ.
  • Hết chức năng hộp cho Hibernate.
  • Trong trường hợp của tôi, tôi yêu cầu như 30 phút từ Tải xuống ứng dụng Hello World. (IntelliJ IDEA IDE)
  • Triển khai dưới dạng JNLP, độc lập, Web (cầu nối nhúng NOX hoặc hương vị Scimpi) và RCP Eclipse.
  • Nhóm NOF luôn sẵn sàng giúp bạn khi bạn yêu cầu trợ giúp trong diễn đàn.
  • Mẫu đối tượng trần truồng là một ý tưởng tuyệt vời, hãy tự làm một việc và dành thời gian của bạn để giải quyết nó.
  • Theres rất nhiều khả năng sử dụng lửa đang diễn ra xung quanh Kéo và thả giao diện đồ họa, nhưng nếu người dùng cuối tiềm năng của bạn chỉ đơn giản là không thể làm việc với giao diện người dùng Chia sẽ sau đó bạn đang gặp rắc rối sâu anyway.

Nhược điểm:

  • Không mà tôi có thể nghĩ đến.

Các kinda xấu xí:

  • Không có thành phần Swing cho phép, vì vậy nói lời tạm biệt với JGoodies và tất cả các bộ linh kiện Swing yêu thích của bạn. Các thành phần giao diện người dùng được tùy chỉnh; để giúp bạn có được ý tưởng giống như các điều khiển VB đầu thập niên 90. Nhưng có một cổng SWT trong các công trình.
  • Trường dòng nhiều dòng cho các chuỗi dài có một số vấn đề. (NOF 3.0.3)
  • Giao diện người dùng DnD cho hình ảnh là lỗi.
  • Mã xác nhận cho các trình cài đặt getters n chỉ kích hoạt nếu đối tượng miền được sửa đổi từ giao diện người dùng. (Điều này có thể sai do n00bness của tôi, cho phép hy vọng một người gửi NOF sửa chữa cho tôi)
  • Nếu một đối tượng được sửa đổi từ một chủ đề không phải là sợi, hãy nói một ví dụ công nhân, đối tượng đó sẽ
    không cập nhật chế độ xem trên màn hình. Điều này làm mất hiệu lực một trường hợp sử dụng như là đại diện cho một hàng đợi thư trong thời gian thực trên giao diện người dùng tự tạo DnD. (Một lần nữa)

  • Veikko

6

Nó đã được sử dụng thành công here in Ireland.

Tôi nghĩ lý do tại sao nó has not được phổ biến hơn là:

  • Bạn cần rất nhiều niềm tin vào bộ công cụ bạn đang sử dụng
  • Nó làm cho GUI một yếu tố nguy cơ thay vì không có trí tuệ (cả về kỹ thuật và kiểm tra khả năng sử dụng)
  • nó không áp dụng đối với các trang web (như xa như tôi biết), đó là nơi mà hầu hết tập trung là như hiện nay ...
+1

Nó được áp dụng cho web. Và tôi thấy liên kết ireland, nhưng tôi tin rằng ngay cả các dự án phần mềm của chính phủ chỉ là "chính trị". – Midhat

+2

Midhat - không chắc chắn ý bạn là gì 'chính trị'. Tôi có kiến ​​thức trực tiếp về các dự án của Chính phủ Ireland. Bộ Bảo vệ Xã hội đã phân phối khoảng 35 dự án lớn bằng cách sử dụng khung Naked Objects, được sử dụng cả ngày mỗi ngày bởi 2000+ người dùng (sắp mở rộng đến 6000). Các hệ thống hỗ trợ việc quản lý và thanh toán một loạt các lợi ích của tiểu bang, bao gồm tất cả lương hưu của tiểu bang. –

2

Gareth làm cho một số điểm xuất sắc.

Có những vấn đề khác, chẳng hạn như việc khó kiểm soát giao diện và chúng phản trực giác với những người đã quen với mô hình cửa sổ. Ngoài ra còn có một cái gì đó của một vấn đề mô hình hóa, trong đó không phải tất cả các lĩnh vực ứng dụng cho vay tốt để trực tiếp đại diện oject.

Mô hình chung của 'lập trình viên công dân' được tán thành trong các cộng đồng đối tượng nhỏ và khỏa thân cũng trở thành một ý tưởng đáng ngờ. Hầu hết người dùng dường như không hề bận tâm với việc thay đổi chức năng, vì vậy suy nghĩ trong các đối tượng không hữu ích.

4

Tôi đã chơi với nó năm ngoái hoặc lâu hơn và kết luận là rất dễ làm việc.

Sức mạnh của Naked Objectsis mà bạn nhận được GUI được cấu trúc theo mô hình dữ liệu của bạn miễn phí. Điểm bất lợi là một người sử dụng điển hình không nghĩ về các sản phẩm của mình như một bộ sưu tập các bản ghi.

Kết luận của tôi là các đối tượng khỏa thân thực sự tuyệt vời cho một ứng dụng nội bộ mà giao dịch khái niệm với hồ sơ, như ứng dụng kiểm kê hoặc ứng dụng xử lý hóa đơn.

Nếu bạn cần bất cứ điều gì khác nhau, thích ứng với khung làm việc theo mong muốn của bạn, bạn có thể làm việc nhiều hơn là sử dụng khung được viết để hỗ trợ loại ứng dụng bạn muốn.

Nhân tiện, có tùy chọn hiển thị trên web; xem bản trình diễn tại Naked Objects Demo.

2

Có lẽ lý do nó không nhận được nhiều sự chú ý hơn là thế giới J2EE đã trở nên quen với việc xếp chồng lên rất nhiều lớp vào một ứng dụng, rằng các vật thể trần truồng xuất hiện như ngây thơ.

Dịch vụ của chúng tôi ở đâu? Bạn có nghĩa là bất kỳ đối tượng trần truồng nào cho phép tôi truy cập ngay vào cơ sở dữ liệu? Điều gì sẽ xảy ra nếu chúng ta cần phơi bày ứng dụng bằng các cuộc gọi RMI?

Plus có không phải là nhiều để thị trường, bởi vì nó đặt gánh nặng của việc phát triển một ứng dụng thành công thẳng vào các nhà phát triển ứng dụng không phải là nhà phát triển khuôn khổ :)

5

Tôi đã chỉ nhìn thấy điều này. Một vài sửa đổi nhỏ, nếu không hầu hết các ý kiến ​​đều rất công bằng.

1) 'Khung chỉ yêu cầu đối tượng miền của bạn (POJO) được phân lớp từ AbstractDomainObject thats tất cả các hệ thống dây điện tối thiểu.'

Đối tượng khỏa thân không yêu cầu đối tượng miền được phân lớp từ AbstractDomainObject, mặc dù đó thường là điều thuận tiện nhất để thực hiện.

Nếu bạn không muốn kế thừa, tất cả những gì bạn cần làm là cung cấp thuộc tính của loại IDomainObjectContainer và sau đó khung sẽ chèn một vùng chứa vào đối tượng của bạn khi chúng được tạo hoặc truy xuất. Vùng chứa có các phương thức cho Resolve(), ObjectChanged() và NewTransientInstance(), là ba điểm tiếp xúc nhỏ gọn với khung công tác mà bạn phải sử dụng, để khung công tác vẫn đồng bộ với các đối tượng miền của bạn.

2) 'Hoạt động tốt để tạo mẫu cùng với db4o cho sự bền bỉ'. Chúng tôi rất quan tâm đến ý tưởng làm việc với db4o, nhưng tôi không biết ai đã làm cho Naked Objects và db4o chơi cùng nhau. Nếu có ai làm điều này, tôi muốn nghe thêm về nó.

3) 'Mô hình chung của lập trình viên citzen như được tán thành trong các cộng đồng đối tượng nhỏ và trần truồng ...'. Chúng tôi chưa bao giờ tán thành ý tưởng đó, và tôi không đồng ý với nó. Các đối tượng khỏa thân KHÔNG phải là khuyến khích người dùng lập trình. Tôi tin tưởng vững chắc vào vai trò của nhà phát triển chuyên nghiệp - Naked Objects giúp họ viết phần mềm tốt hơn và hiệu quả hơn.

Richard

0
  • sử dụng rộng rãi công nghệ không có tương quan chặt chẽ đến chất lượng công nghệ.
  • Hệ thống nakedobject khó sử dụng kết hợp với loại đối tượng: nếu tôi đang bán các loại sản phẩm khác nhau và cần dữ liệu khác nhau cho các sản phẩm khác nhau, rất khó hạn chế dữ liệu trên loại sản phẩm.
  • KHÔNG mất đà khi chuyển đổi giấy phép. (đối với GPL + Thương mại, không phải động thái gần đây đối với Apache)

Bạn có nhìn vào jmatter không?

[biên tập] Và một số khác: nó làm cho nó rõ ràng đối với người không lập trình nếu bạn có thể phân phối. Mùa xuân là rất nhiều trong lĩnh vực công nghệ, KHÔNG có nghĩa là một nhà phát triển phải nói chuyện với người dùng. Các tổ chức lớn không làm điều đó.

2

Tôi đoán NakedObject chắc chắn có mức độ liên quan và nhiều hơn thời gian cộng đồng nhà phát triển tập trung vào những gì thực sự trả tiền cho họ: doanh nghiệp. Thay vào đó, chúng tôi chủ yếu dành thời gian của chúng tôi với cơ sở hạ tầng, giao thức và tất cả những crap kỹ thuật đó. Tôi đã thấy những ứng dụng được xây dựng bị bỏ lỡ như vậy và thậm chí tôi đã làm một số bản thân mình theo dòng chính, dạy bạn rằng việc phân lớp một hệ thống luôn là điều tốt để làm. Điều tồi tệ nhất là nếu bạn hỏi một số nhà phát triển về loại doanh nghiệp mà họ đang làm việc, bạn sẽ tìm thấy ít nhất một số người làm việc cho công ty trong nhiều năm mà không hiểu rõ hơn về doanh nghiệp. Tuy nhiên, tôi không tin rằng NakedObject sẽ thu hút phần lớn các nhà phát triển (ngay cả những người được lấy cảm hứng từ DomainDrivenDevelopment) đơn giản chỉ vì mọi người thích xây dựng giao diện người dùng và thực hiện công việc đó, chỉ đạo công việc của họ theo hướng nhu cầu của doanh nghiệp. không phải những gì họ muốn: Tất cả chúng tôi đều là những kẻ lừa đảo của VB.

2

NakedObjects (NO) rất tốt cho việc tạo mẫu nhanh. Bạn có thể tập trung vào Domain Model trong khi không chú ý đến GUI, DB và các phần khác của giải pháp. Đối với sản xuất, nó đòi hỏi rất nhiều cải tiến (sửa lỗi, lập bản đồ dữ liệu, gui, vv) trong chính khung công tác NakedObjects.

Vì vậy, nếu bạn cần nhận được một số loại "bằng chứng khái niệm" cho giải pháp của mình, bạn có thể sử dụng KHÔNG.Nhưng để sản xuất sẵn sàng đầu tư nguồn lực vào phát triển khuôn khổ NO.

BTW, gần đây chúng tôi đang nghiên cứu tạo trình xem DnD dựa trên GWT cho NO 4.0.

+1

Tôi thấy bạn đã trả lời câu hỏi này trong tháng 4 năm 2010. Bạn nỗ lực sử dụng NO với GWT như thế nào? – elviejo79

8

Tôi đã làm việc trên các phương pháp tiếp cận đối tượng khỏa thân trong hơn một năm nay và tôi thậm chí không bắt đầu làm xước bề mặt của các khả năng mà nó cung cấp cho kiến ​​trúc của hệ thống của bạn. Để sử dụng đúng cách, nó đòi hỏi bạn tạo ra một sự thay đổi mô hình và tìm kiếm các giải pháp OO đầy đủ và hoàn nguyên từ việc sử dụng các băng vịt chức năng, vì mô hình dường như chỉ hoạt động khi bạn tạo ra một thiết kế cho phép phát triển cấp cao.

Có nói rằng, tôi hoàn toàn thích cách Django đã triển khai các đối tượng khỏa thân bên trong mô hình Django của nó. Hầu hết những điều tôi yêu thích về khuôn khổ đã là, điều tôi tin rằng, một kết quả trực tiếp của các mô hình đó và có một số lời thề trên đầu tôi muốn chia sẻ về kiến ​​trúc:

Các trường mô hình, ánh xạ tới các cột bảng, là các đối tượng hoàn chỉnh về hành vi - chúng biết cách chúng được thể hiện trong cả miền ứng dụng và cơ sở dữ liệu, cách chúng được chuyển đổi giữa hai và cách thông tin mà chúng nắm giữ được xác thực và hiển thị trực quan cho người dùng . Tất cả điều này được sử dụng với một dòng mã trong mô hình của bạn. Wow!

Người quản lý được gắn vào mô hình và cung cấp CRUD và bất kỳ hoạt động chung nào trên bộ sưu tập, chẳng hạn như truy vấn có thể sử dụng lại (cho tôi 5 bài đăng blog cuối cùng, hầu hết các thẻ đang diễn ra, v.v.) trên các phiên bản. Wow!

Bây giờ, hãy xem xét bạn có mô hình đại diện cho người dùng. Đôi khi, bạn chỉ muốn xem một phần tất cả thông tin mà mô hình người dùng nắm giữ (khi đặt lại mật khẩu của người dùng, bạn chỉ có thể cần email của người dùng và câu hỏi bí mật của mình). Họ đã cung cấp API biểu mẫu hiển thị chính xác và quản lý dữ liệu đầu vào chỉ cho các phần của dữ liệu mô hình. Cho phép tùy chỉnh những gì/cách xử lý đầu vào của người dùng. Wow!

Kết quả cuối cùng là các mô hình của bạn chỉ được sử dụng để mô tả thông tin bạn sử dụng để mô tả một miền cụ thể; các nhà quản lý thực hiện tất cả các hoạt động trên các mô hình; các biểu mẫu được sử dụng để tạo các khung nhìn và để xử lý các đầu vào của người dùng; bộ điều khiển (views) chỉ ở đó để xử lý các động từ HTTP và nếu chúng hoạt động với các mô hình, nó chỉ là thông qua các trình quản lý và các biểu mẫu; các khung nhìn (mẫu) có sẵn cho bản trình bày (phần không thể được tạo tự động). Đây, imho, là một kiến ​​trúc rất sạch sẽ. Có thể sử dụng và tái sử dụng các trình quản lý khác nhau trên các mô hình khác nhau, các biểu mẫu khác nhau có thể được tạo cho các mô hình, các chế độ xem khác nhau có thể sử dụng các trình quản lý khác nhau. Những mức độ phân tách này cho phép bạn nhanh chóng thiết kế ứng dụng của mình.

Bạn tạo một hệ sinh thái của các đối tượng thông minh và nhận được toàn bộ ứng dụng từ cách chúng được kết nối với nhau. Với tiền đề rằng chúng được kết hợp lỏng lẻo (rất nhiều khả năng cho phép chúng giao tiếp theo nhiều cách khác nhau) và có thể dễ dàng sửa đổi và mở rộng (một vài dòng cho yêu cầu cụ thể đó), theo mô hình bạn thực sự có kiến ​​trúc nơi bạn thành phần viết một lần và sau đó tái sử dụng nó trong suốt các dự án khác của bạn. Đó là những gì MVC nên có luôn luôn được, nhưng tôi đã thường xuyên phải viết một cái gì đó từ đầu mặc dù tôi đã làm điều tương tự một vài dự án trước đây.

+0

câu trả lời hay. wold bạn tâm nói nhiều hơn về cách tiếp cận đối tượng trần truồng? những gì bạn nói về nó có vẻ rất thú vị. –

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