Relax với lập trình viên

Wednesday, March 25, 2009 0 phản hồi

Làm sao để sếp tức điên


Tại sao lập trình viên ko chịu refactor code?

TinyERP framework

1 phản hồi

Cách đây vài tuần, một người bạn nhờ tư vấn một framework để phát triển ứng dụng winform trên .NET (dùng C# để phát triển). Cái này làm mình nhớ đến một framework tương tự đã build trên Java để làm một số ứng dụng ERP ở Pissoft cách đây 3 năm.

Sau một số chọn lựa, cuối cùng cũng đã thiết kế được phần core và hoàn tất một số feature chính của framework.

Library nền tảng:
         + Spring .NET
         + NHibernate
Hướng tiếp cận:
         + Domain driven: thiết kế hệ thống từ domain entity (ko xuất phát từ RDBMS)

Những feature chính mà framework hỗ trợ:
         + Sinh tự động Database Access Layer, Business layer từ domain entity
         + Hỗ trợ sinh Hibernate mapping từ domain model (ở mức đơn giản và thông dụng nhất). Mô hình mapping và sinh code dựa trên những best practices mà mình đã làm trên những ứng dụng dựa trên NHibernate hơn 3 năm gần đây.

         + Sinh ra GUI cho các domain entity (chưa hỗ trợ cho các quan hệ nhiều nhiều).
         + Cơ chế Validation trên UI cho winform. Cái này bác Microsoft hỗ trợ chuối quá - nên buộc phải viết lại.
Vài screenshot giới thiệu đến mọi người:


                               Tool KGen để generate code

Kết quả sinh code cho lớp đối tượng User


Giao diện và chương trình chạy sau khi sinh code
Form Quản lý user
 
Form edit và tạo mới user:


Một số side-effect:
- Ban đầu định dùng KMyGeneration (K = Khoa :-), vì lúc trước có build một số template tương tự đụng đến nhu cầu phải customize lại tool MyGeneration). Tuy nhiên, template code của MyGeneration và UI của nó hơi khó customize và không tiện dụng cho người dùng. Cuối cùng, build lại 1 tool mới - đặt tên mới: KGen. KGen hỗ trợ viết GUI trên Visual Studio + template viết bằng NVelocity (sáng sủa, dễ đọc và dễ maintain hơn). Thời gian làm cái này mất khoảng 4h). 

- Không dự định dùng commercial UI library, nhưng cuối cùng thấy mất thời gian cho việc build những thứ linh tinh này. Suggest cho anh bạn xài Janus (thanks bác Vinh đã giới thiệu). Tuy nhiên có một bộ UI library khác là Krypton Library - có free một số component cũng khá cool (có thể xem xét).

Cái framework này chỉ viết chơi cho vui. Thời gian build tổng cộng gần 1 tuần. Vì đã có một số kinh nghiệm nên build cũng nhanh.

Sẽ viết một bài để trao đổi về kinh nghiệm build framework cho các ứng dụng ERP from scratch (dựa trên những năm tháng chiến đấu với các ERP app ở Pissoft). :-)

NHibernate query analyzer

0 phản hồi

(Bài viết này dành cho những ai đã từng sử dụng NHibernate)

Để test những câu Hibernate query, mọi người thường sử dụng Unit test để kiểm tra hoặc viết một app đơn giản để thử nghiệm. Tuy nhiên, có một công cụ khá hữu hiệu để ta có thể làm việc này một cách dễ dàng: NHibernate Query Analyzer. Công cụ này được phát triển bởi Ayende Rahien.
Mọi người có thể download nó về tại đây: http://www.assembla.com/wiki/show/NHibernateQueryAnalyzer


Mình sử dụng NHibernate Query analyzer từ những ngày đầu tiên nó được phát triển (cách đây gần 2 năm). Qua một thời gian, tool này được upgrade lên khá nhiều và cập nhật với phiên bản của NHibernate mới (2.1).

Tool này khá hữu hiệu. Tuy nhiên hơi bị khó xài. Mà hình như tool nào do developer tự phát triển cũng đều khó xài (just funny). Đặc biệt là lúc config ở giai đoạn đầu dễ gặp nhiều vấn đề.

Dưới đây là một số step cơ bản mọi người có thể làm theo để chạy được nó:
1. Add vào assembly dll chứa các entity cần map.

 


2. Add file hibernate config vào. File này mặc định là: hibernate.cfg.xml chứa những tham số để thiết lập connection đến database và config cho việc query.


Dưới đây là một file config sample để mọi người tham khảo. Lưu ý là file này phải đặt tên có extension là cfg.xml thì sẽ giúp bạn add nó vào Hibernate Query Analyzer tool dễ dàng hơn.

Vì NHibernate Query Analyzer đã upgrade để tương thích với NHibernate 2.1 nên schema của file config cũng khác đi => dễ gặp báo lỗi invalid xml syntax. Tốt nhất bạn nên sử dụng sample dưới đây (sửa lại db connection string)

 
  True=1;False=0
  true
  NHibernate.Driver.SqlClientDriver
  NHibernate.Dialect.MsSql2005Dialect
  NHibernate.Connection.DriverConnectionProvider
  Data Source=TIGER\SQLEXPRESS;Database=TinyERP;User ID=sa;Password=1234;
 


3. Add các file mapping.
Lưu ý đặc biệt: nếu như bạn đã build mapping files như embeded resources trong các assembly, thì không cần làm bước này. NHibernate query analyzer sẽ tự detect trong các assembly. Nếu bạn vẫn add vào thì sẽ bị báo lỗi: duplicate entity declaration.

4. Build project.

5. Tạo query
Trong ví dụ này mình tạo 2 bảng: User và UserGroup. 1 User liên kết với 0-1 UserGroup.
Câu query mẫu để lấy thông tin user và sort theo group name:
select user from User user left outer join user.UserGroup order by user.UserGroup.Name
Có thể xem câu sql sinh ra do NHibernate ở bottom textbox.
Click F5 để run và xem kết quả:

Nếu bạn gặp vấn đề với cấu hình để chay NHibernate Query Analyzer thì có thể contact mình.


---------------------------------------
Đang chuẩn bị cho một khóa training về NHibernate. Có ai đặt hàng hông? :)