2008-08-28 36 views
21

XPO là công cụ lập bản đồ quan hệ đối tượng được lựa chọn tại công ty của tôi. Bất kỳ suy nghĩ về ưu và nhược điểm?Bất kỳ suy nghĩ nào về DevExpress XPO ORM Package?


Tôi chỉ tìm kiếm cảm giác chung và những giai thoại về sản phẩm. Chúng tôi không chuyển sang XPO. Chúng tôi chỉ đang loại bỏ các chuỗi sql cứng được mã hóa trong ứng dụng và di chuyển hoàn toàn sang ORM để truy cập tất cả dữ liệu.

+0

Bất kỳ ý tưởng nào về cách XPO xử lý lệnh SQL tùy chỉnh đơn giản với (tham gia, ...) hoặc cách làm việc với quy trình lưu trữ? – bmustata

Trả lời

0

Ưu và khuyết điểm so với những gì? Có rất nhiều lựa chọn thay thế ở đó, phổ biến nhất là nHibernate, với kid mới 'ADO.NET Entity Framework' trên khối.

Dù sao, có hàng trăm câu trả lời tùy thuộc vào tình huống và yêu cầu của bạn.

15

người khác có lẽ sẽ sân trong với câu trả lời kỹ thuật (ví dụ các cú pháp truy vấn, sử dụng bộ nhớ đệm, giảm bớt hoặc lập bản đồ đến một cấu trúc cơ sở dữ liệu hiện có) - nhưng nếu bạn có một lớp ORM thành lập câu trả lời có lẽ là

"Tại sao thay đổi"?

Tôi đã sử dụng XPO thành công trong nhiều năm trong một sản phẩm thương mại được thành lập với hàng trăm người dùng. Tôi thấy rằng nó nhanh chóng, linh hoạt và thực hiện công việc. Tôi không thấy bất kỳ cần phải thay đổi vào lúc này, vì khối lượng dữ liệu của chúng tôi không lớn lắm và các foibles (caching, chủ yếu) là những thứ chúng ta có thể làm việc xung quanh.

Nếu tôi bắt đầu lại, tôi chắc chắn sẽ xem cả NHibernate lẫn ADO.NET Entity Framework. Trong thực tế, mặc dù, tất cả đều tốt; Tôi rất có thể sẽ xem xét tình hình thương mại của dự án trước các câu hỏi kỹ thuật.

Ví dụ, NHibernate là nguồn mở - có một cộng đồng khả thi ở đó để hỗ trợ công cụ và cung cấp (nếu cần) hỗ trợ thương mại không?

XPO xuất phát từ nhà cung cấp công cụ, họ có thể duy trì hoạt động trong suốt thời gian tồn tại của sản phẩm không?

ADO.NET Entity Framework đến từ Microsoft, người nổi tiếng về việc thay đổi công nghệ cơ sở dữ liệu thường xuyên hơn, sau đó Larry lấp đầy máy bay chiến đấu của mình bằng nhiên liệu phản lực - điều này cũng sẽ biến mất?

0

Tôi thích thực tế là bạn chỉ có thể tạo các lớp và xpo tạo các bảng và mối quan hệ cho bạn - vì vậy bạn có thể bắt đầu từ một cơ sở dữ liệu trống.

Một vấn đề mà tôi không thích là khi tôi muốn xóa toàn bộ nội dung, nó sẽ đi qua bộ sưu tập của tôi và thực hiện xóa trên mỗi bộ sưu tập. Điều này mất lứa tuổi, vì vậy đối với loại dụ, tôi đã phải viết một số sql tùy chỉnh (xóa từ bảng nơi blah). Tôi không có chuyên gia về XPO, nhưng đó là những gì tôi tìm thấy.

+0

Điều này cũng có thể được thực hiện với NHibernate và EF: được gọi là cách tiếp cận mã đầu tiên. –

0

Tôi thứ hai thực tế việc xóa các đối tượng phức tạp với một số bộ sưu tập mất nhiều thời gian thực sự. Cho đến nay tài liệu hoặc diễn đàn đã không thể giúp tôi với điều này.

Ngoài ra, nó rất dễ sử dụng và giúp bạn phát triển nhanh chóng. Nó cũng khá khó để tìm ra cách sử dụng bộ nhớ của bạn, tôi đã có các đối tượng lớn phức tạp trong thiết kế của tôi và làm việc với họ là một con heo nhớ lớn hơn tôi đã giả định.

9

Tôi thấy XPO rất bực bội khi làm việc cùng. Ý tưởng chính của ORM là trừu tượng hóa cấu trúc dữ liệu cơ bản.Nhưng rất nhanh chóng bạn sẽ nhận thấy rằng họ có độ dài chuỗi mặc định được mã hóa cứng thành 60 ký tự, vì vậy bạn sẽ kết thúc việc thêm những thứ string.unlimited xấu xí này vào mọi chuỗi. Vì vậy, nhiều cho trừu tượng ...

Khi tạo mô hình đối tượng phức tạp hơn, bạn phải sử dụng nhiều cú pháp thực sự không có vị trí trong mô hình đối tượng của bạn, như XPCollection. Tôi muốn lưu trữ một lớp có từ điển các chuỗi trên lớp, nhưng đáng buồn là XPO không thể tự động lưu trữ nó vào cơ sở dữ liệu.

Vì vậy, trong khi nó hoạt động tốt cho các loại đơn giản, nó rất nhanh chóng phá vỡ khi bạn muốn lưu trữ những thứ phức tạp hơn. Điều đó kết hợp với sự hỗ trợ tầm thường của họ thực sự để lại một LOT được mong muốn.

+3

Tôi đã sử dụng chúng trong nhiều năm tại công việc cuối cùng của tôi, mặc dù không phải cho xpo, và luôn tìm thấy sự hỗ trợ của họ để nổi bật. Nộp lỗi tất cả các thời gian, hoặc yêu cầu tính năng, và tất cả đều được trả lời rất nhanh chóng. Các lỗi đã được khắc phục nhanh chóng và họ không gặp vấn đề gì khi cho tôi liên kết đến một đêm phát hành trước có chứa các bản sửa lỗi. Tất cả các câu hỏi của tôi về cách sử dụng nó cũng được trả lời nhanh chóng, thường với mã mẫu. Tôi đã nỗ lực rất lớn để gửi các vấn đề về chất lượng, vì vậy có lẽ đó là lý do tại sao. chỉ nghĩ rằng một vấn đề đã bị gắn cờ là trùng lặp trong tất cả các năm đó. Công ty tuyệt vời để làm việc với, IMO. –

+3

Theo mặc định, các thuộc tính chuỗi được ánh xạ tới một cột có kích thước 100. Trong bất kỳ cách nào, bạn có thể dễ dàng thay đổi kích thước mặc định thông qua thuộc tính SizeAttribute.DefaultStringMappingFieldSize tĩnh (nó chỉ cần được thực hiện một lần). Ngoài ra, bạn có thể kiểm soát kích thước của các thuộc tính riêng lẻ bằng cách đánh dấu chúng bằng SizeAtrribute, ví dụ: [Kích thước (255)] trong C#. Bạn có thể tìm thêm chi tiết tại http://documentation.devexpress.com/#XPO/clsDevExpressXpoSizeAttributetopic Cuối cùng, bạn thậm chí có thể chỉ định loại cơ sở dữ liệu của cột mà thuộc tính được ánh xạ tới thông qua DBTypeAttribute, ví dụ: [DbType ("smalldatetime ")] –

+0

Đối với việc lưu trữ các loại phức tạp tùy chỉnh, tôi nghi ngờ rằng các ORM khác có hỗ trợ buil-in cho việc này. XPO out-of-the-box có khả năng duy trì các loại phổ biến và được sử dụng nhiều nhất và * cung cấp khả năng * để lưu trữ * bất kỳ loại tùy chỉnh nào *, thông qua cơ chế của Trình chuyển đổi giá trị. Ví dụ, ImageValueConverter và UtcDateTimeConverter là ví dụ về các trình biến đổi giá trị như vậy. Việc thực hiện một trình biến đổi giá trị tùy chỉnh rất dễ dàng, bởi vì bạn phải thực hiện chỉ có hai phương thức. Các chi tiết khác có thể được tìm thấy tại http://documentation.devexpress.com/#XPO/clsDevExpressXpoMetadataValueConvertertopic –

3

XPO nói chung rất dễ làm việc. Tuy nhiên, nó có thể là một chút đau khi bạn có kế hoạch làm việc với cơ sở dữ liệu cũ hoặc cố gắng giới thiệu nó vào một ứng dụng brownfield. Hầu hết các chướng ngại vật đau đớn tôi đạt được là:

  • tất cả các đối tượng cần kế thừa từ các lớp liên quan đến XPO và/hoặc sử dụng các thuộc tính liên quan đến XPO. Vì vậy, không có đối tượng POCO
  • không hỗ trợ cho các trường liên tục chỉ đọc OOTB. Có thể, nhưng bạn cần phải thực hiện một chút hack để ngăn XPO khỏi việc cập nhật trường trong DB
  • không hỗ trợ cho các liên kết lọc trước, có thể gây tải mạng quá mức
  • Hỗ trợ người nghèo cho các phím tổng hợp nước ngoài. Để công bằng, không có ORM nào xử lý các phím tổng hợp một cách độc đáo. Chúng được coi là mẫu "chống ORM".
  • vài phiền toái nhỏ

Như Dennis đã chỉ ra trong các ý kiến, XPO được cải thiện rất nhiều kể từ khi tôi viết câu trả lời này ban đầu. Đặc biệt, bên dưới mọi thứ không còn là vấn đề:

  • không thể tuần tự hóa, vì vậy các đối tượng XPO khó sử dụng trong trường hợp hình thức giành chiến thắng, với dữ liệu đến qua dịch vụ web. - XPO hỗ trợ các kịch bản serialization khác nhau và có thể dễ dàng sử dụng với WCF.
  • bạn không thể thực hiện ánh xạ quan hệ nhiều-nhiều với bảng tạm thời của riêng bạn. Xpo muốn tên cụ thể cho các bảng tạm thời này. - Đây không còn là trường hợp
  • không hỗ trợ cho enums trong nhà cung cấp postgreSql - Bạn chỉ cần viết trình chuyển đổi giá trị thực sự đơn giản và bạn tốt.

Ngoài ra, dưới đây vấn đề này sẽ không còn là vấn đề với phát hành XPO tiếp theo, đến cuối năm nay:

  • không hỗ trợ phím kiểu dài
  • không hỗ trợ schema db trong cung cấp dịch vụ postrgeSql

Tất cả trong tất cả, XPO đã được cải thiện rất nhiều. Hầu hết những trở ngại đau đớn đã được gỡ bỏ. Bạn vẫn có thể gặp sự cố khi làm việc với DB kế thừa. Nhưng nói chung XPO trở nên khá thuận tiện để sử dụng.

+0

Các trường hợp hậu trường là các trường hợp cạnh xem xét tất cả các trường hợp khác - phổ biến hơn - các DB được hỗ trợ. 2 là sai, kế thừa từ XPCustomObject. 3 cũng chỉ áp dụng nếu bạn đang sử dụng các trường được tạo. 4 là chống lại ý định của một ORM. WRT 9, sử dụng một nhà cung cấp máy bay phản lực thay vào đó, và serialize nó cho mình nếu bạn đang sử dụng WCF/dịch vụ Web. Đừng hiểu lầm tôi, tôi không có nhà truyền giáo xpo; đây chỉ là một danh sách nghèo nàn. –

+0

2 không sai. Nếu bạn kế thừa từ XPCustomObject và đặt KeyAttribute trên trường kiểu Int64, bạn kết thúc với ngoại lệ. KeyAttribute chỉ hoạt động với các trường Int32 hoặc Guid. 3 được áp dụng cho các trường được tạo - đã đồng ý. Đây chính là vấn đề tôi đề cập đến. Hiện không có cách nào để xử lý các trường như vậy với XPO. WRT 4 - ý bạn là gì khi "chống lại ý định của ORM"? Tôi cần phải phản ánh lược đồ của DB hiện tại của tôi. Tôi không thể đổi tên các bảng để phù hợp với "ý định ORM". Tôi cần ORM đủ linh hoạt để bao gồm các kịch bản cũ của tôi. – Przemaas

+0

Các vấn đề PostreSql là các trường hợp góc - đồng ý. Tôi hy vọng các nhà cung cấp Xpo cho các DB khác không có lỗi và cho phép làm việc với các tính năng mới nhất của các DB đó. Bạn gọi danh sách của tôi là người nghèo, nhưng tất cả những vấn đề này là những trở ngại thực sự khi bạn nhấn chúng trong khi làm việc với DB và Xpo cũ. – Przemaas

4

Tôi đã làm việc với nó trong 6-7 tháng và người bán cho tôi là thực tế tất cả các thành phần giao diện người dùng của họ hoạt động tương đối liền mạch với XPO - và các thành phần giao diện người dùng của họ là đỉnh cao.

Một số có thể lưu ý rằng diễn đàn của họ bị giám sát kém và có ít lưu lượng truy cập hữu ích - điều này đúng. Bí mật là để điền vào vé mặc dù.Họ phản hồi nhanh chóng và chính xác cho tất cả các vé hỗ trợ của họ.

+0

Và trang web trung tâm hỗ trợ của họ lên và xuống như một ... – Junto

+0

Có, bây giờ tôi nên sử dụng ** Trung tâm hỗ trợ ** (http://www.devexpress.com/Support/Center /) thay vì diễn đàn XPO (http://community.devexpress.com/forums/163.aspx), nếu bạn muốn nhận được sự trợ giúp nhanh chóng và được đảm bảo từ các đại diện của DevExpress.May mắn thay, sẽ có ít sự nhầm lẫn giữa các diễn đàn và Trung tâm hỗ trợ khi chúng được hợp nhất thành một công cụ, alO StackOverflow. BTW, cũng có thể chuyển phản hồi về XPO & XAF thông qua các nhóm trong mạng xã hội: http://community.devexpress.com/blogs/eaf/archive/2011/05/06/frameworks-fan-clubs- trong mạng xã hội.aspx –

0

Đây là tất cả các bạn cần làm để bắt đầu viết đối tượng tên miền của bạn (thử làm như vậy trong các hệ thống khác):

using System; 
using DevExpress.Xpo; 
using DevExpress.Data.Filtering; 
using NUnit.Framework; 

namespace XpoTdd { 
    public class Person:XPObject { 
     public Person(Session session) : base(session) { } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     [Persistent] 
     public string FullName { get { return FirstName + " " + LastName; } } 
    } 
    [TestFixture] 
    public class PersonTests { 
     [Test] 
     public void TestPersistence() { 
      const string connStr = "Integrated Security=SSPI;Pooling=false;Data Source=(local);Initial Catalog=XpoTddTest"; 
      UnitOfWork session1 = new UnitOfWork(); 
      session1.ConnectionString = connStr; 
      Person me = new Person(session1); 
      me.FirstName = "Roman"; 
      me.LastName = "Eremin"; 
      session1.CommitChanges(); 
      UnitOfWork session2 = new UnitOfWork(); 
      session2.ConnectionString = connStr; 
      me = session2.FindObject<Person>(CriteriaOperator.Parse("FullName = 'Roman Eremin'")); 
      Assert.AreEqual("Roman Eremin", me.FullName); 
     } 
    } 
} 
2

XPO ver 10,2 giờ đây hỗ trợ cho cả StoredProcedures và SqlQueries. Xem thông tin here ...

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