Hỏi Đáp

Welcome!

This community is for professionals and enthusiasts of our products and services.
Share and discuss the best content and new marketing ideas, build your professional profile and become a better marketer together.

0

Kiến trúc trong OpenERP

Ảnh đại diện
Vương Thùy Chi

Em chào các anh ạ!
Em đang bắt đầu nghiên cứu về OpenERP nên còn nhiều điều chưa rõ, em rất mong nhận được ý kiến của các anh.
Em đang đọc tài liệu về kiến trúc của OpenERP và gặp phải những vấn đề sau:
1: Mô hình kiến trúc trong OpenERP
Ngay phần đầu tiên của tài liệu thì em thấy OpenERP mô tả về mô hình MVC và có đoạn:
MVC Model in OpenERP
In OpenERP, we can apply this model-view-controller semantic with
model : The PostgreSQL tables.
view : views are defined in XML files in OpenERP.
controller : The objects of OpenERP.
nhưng xuống phần tiếp theo thì em thấy họ lại viết OpenERP is a multitenant, three-tier architecture. The application tier itself is written
as a core, multiple additional modules can be installed to create a particular configuration of OpenERP.
=> Em không rõ là OpenERP được viết theo kiến trúc nào :(
=> Theo vốn kiến thức hạn hẹp của em thì em nghĩ model trong MVC thường bao gồm cả phần xử lý thao tác kết nối với database chứ ạ, sao ở đây model
lại chỉ là PostgreSQL table
2: Mối quan hệ giữa ORM và OSV
Em xin trích nguyên văn một đoạn em tìm hiểu trên diễn đàn erp thế này ạ:
"OpenERP được phát triển dựa trên framework OpenObject, một framework hướng mô đun, có khả năng mở rộng, và là một nền tảng trực quan được
viết bằng ngôn ngữ Python để giúp phát triển các ứng dụng một cách nhanh chóng.OpenObject có một bộ công cụ đầy đủ và hướng mô đun để xây
dựng các ứng dụng nhanh chóng: hỗ trợ Object-Relationship Mapping (ORM), mô hình Model-View-Controller (MVC), một hệ thống xuất báo cáo,
đa ngôn ngữ, và nhiều thứ khác nữa".
=> Em có tìm hiểu thêm về OpenObject nhưng không thu được nhiều, vẫn lơ mơ ạ hic hic
"Object Service – ORM
Là thành phần chính của OpenObject, Object Service(OSV) đưa ra một tầng ánh xạ hoàn thiện giữa đối tượng trong framework và bảng dữ liệu quan hệ dưới
PostgreSQL, giúp các nhà phát triển khỏi phải viết các câu lệnh SQL dài dòng.
Các đối tượng được khai báo giống như các lớp trong Python, được kế thừa từ lớp osv.osv; các đối tượng này là một phần của các model trong
OpenObject; tồn tại nhờ tầng ORM"
=> Em đã cài đặt đầy đủ công cụ để có thể viết module và có kiểm tra cấu trúc của dữ liệu nhưng em vẫn không hiểu mối liên quan giữa 2 lớp này
orm kế thừa từ osv hay thế nào.
Trên đây là những vấn đề mà em gặp phải mà chưa biết làm thế nào để giải quyết. Em mới tìm hiểu về OpenERP và có rất nhiều điều em chưa rõ, em rất mong
nhận được ý kiến, hướng dẫn của các anh. Mọi ý kiến của các anh đều rất quan trọng với em. Em xin chân thành cảm ơn các anh.

Ảnh đại diện
Huỷ
26 Trả lời
0
Ảnh đại diện
Vũ Trọng Đạt
Best Answer

Trên quan điểm lập trình nói chung, các bạn nên phân biệt 3-tier và MVC.

Kiến trúc 3 - tầng là một kiểu kiến trúc bao gồm: tầng Data, Logic và Presentation. Trong khi đó, MVC là một bản mẫu. Ví dụ trong một module của OpenERP bạn cũng có thê sử dụng mẫu MVC để thiết kế module.

http://en\.wikipedia\.org/wiki/Multitier_architecture\#Three\-tier_architecture

http://en\.wikipedia\.org/wiki/Model–view–controller

http://en.wikipedia.org/wiki/Multitenancy

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Coffee One
Best Answer

Có phải cái này không bạn? Mình không phải bên lập trình nhưng cũng đang tìm hiểu OpenERP kể từ khi sử dụng ERPOnline.

OpenERP_Client_server

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vương Thùy Chi
Best Answer

Em cảm ơn anh đã trả lời.
Anh cho em hỏi thêm một chút thế này ạ. Trong module Purchase như hình đính kèm thì các file thể hiện MVC như thế nào. ví dụ phần view là các file .xml, phần controller là các file .py, còn phần model thì tương ứng như thế nào ạ. Em đọc trong tài liệu thấy ghi là phần model là postgreSQL tables nhưng không hiểu lắm ạ. Em cảm ơn anh nhiều!

Capture

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vương Thùy Chi
Best Answer

Anh Leo ơi, anh cho em hỏi là anh bảo bug từ client mà ở đây là web client nhưng khi mình đưa vào eclipse thì chỉ là addons của server thôi mà anh, vậy mình bug thế nào ạ. Em vào theo đường dẫn: C:\Program Files\OpenERP 6.0\Web\addons thì thấy khá nhiều folder như hình bên dưới, em vào các folder thì đều thấy có 1 cái gọi là controller, anh cho em hỏi những file mako và những file như hình bên dưới có nghĩa là gì vậy anh, em cảm ơn anh

Capture

Capture

Capture

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Leo Tran
Best Answer
Anh Leo ơi, anh cho em hỏi là anh bảo bug từ client mà ở đây là web client nhưng khi mình đưa vào eclipse thì chỉ là addons của server thôi mà anh, vậy mình bug thế nào ạ. Em vào theo đường dẫn: C:\Program Files\OpenERP 6.0\Web\addons thì thấy khá nhiều folder như hình bên dưới, em vào các folder thì đều thấy có 1 cái gọi là controller, anh cho em hỏi những file mako và những file như hình bên dưới có nghĩa là gì vậy anh, em cảm ơn anh
Với cách tiếp cận này em sẽ rất khó để nắm bắt được OpenERP, theo anh em nên đi theo hướng sau:
1. Tìm hiểu qua về ngôn ngữ python.
2. Nghiên cứu kiến trúc, mô hình của OpenERP.
3. Thử viết một module.

Không có ít nhất những kiến thức cơ bản trên mà mò thằng OpenERP này là điều cực kỳ khó.
Ảnh đại diện
Huỷ
0
Ảnh đại diện
Leo Tran
Best Answer

@Vuơng Thùy Chi,

Việc bug như ý của em đối với OpenERP hơi phức tạp đấy, tuy nhiên nếu là anh, anh sẽ bắt đầu bug từ thằng client, cụ thể là module web.

Chúc em thành công!

1 Bình luận
Ảnh đại diện
Huỷ
Ảnh đại diện
ViindooBot
-

Em cảm ơn anh!

0
Ảnh đại diện
Leo Tran
Best Answer
Mà anh ơi, lúc mình debug thì nó có nhảy vào file xml không ạ.
Không em à, xml hay html chỉ là một ngôn ngữ đánh dấu, nên không bug đc.
Ảnh đại diện
Huỷ
0
Ảnh đại diện
Leo Tran
Best Answer
Nhưng khi chạy file openerp_server trong addons đó thì nó sẽ chạy module purchase mà anh, em có cài đặt riêng đâu ạ.
__openerp__.py trong một module bất kỳ có nhiệm vụ xác định các file xml sẽ được phân tích trong quá trình khởi chạy server và cũng để xác định sự phụ thuộc của các module tạo ra. Ngoài ra, nó bao gồm một số nội dụng dùng để miêu tả về module: bản quyền, tác giả,…. Do đó trong quá trình em chạy ứng dụng nó sẽ không chạy file này. File này chỉ dùng cho lúc cài đặt & upgrade.
Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vương Thùy Chi
Best Answer

Nhưng khi chạy file openerp_server trong addons đó thì nó sẽ chạy module purchase mà anh, em có cài đặt riêng đâu ạ.

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vương Thùy Chi
Best Answer

Đây ạ,
H:ERPServer\bin\addons\purchase\__openerp__.py
Nó là cái addons của em ạ. Còn cái file server trong ổ C em tắt rồi ạ,em để cái này và chạy file openerp_server của nó ạ, trong file config em đổi đường dẫn rồi ạ.
Em dùng eclipse, em đang debug cái purchase order để xem cái xml nó hoạt động thế nào, osv nhân biết nó ra sao anh ạ. Vì như hôm qua anh giải thích thì cái xml nó được osv nhận biết nhưng em chưa hiểu lắm nên muốn xem control nào điều hướng nó để osv nhận biết và osv trả lại thế nào. Hic, em hiểu chậm nên muốn tìm hiểu kỹ thôi anh ạ. Mà anh ơi, lúc mình debug thì nó có nhảy vào file xml không ạ.

2 Bình luận
Ảnh đại diện
Huỷ
Ảnh đại diện
ViindooBot
-

Nếu em brake point trong file openerp như trên thì nó chỉ bug vào đấy khi em cài module purchase thôi. Em có thể thử :">

Ảnh đại diện
ViindooBot
-

xml không bug được bạn à

0
Ảnh đại diện
Leo Tran
Best Answer
Hic hic, em ngồi debug thì gặp vấn đề thế này ạ. Khi em đặt break point tại file openerp.py thì khi chạy nó k dừng lại tại break point đó, còn khi em đặt tại một vị trí khác, giả sử như hàm unlink trong file sale.py thì nó dừng tại đó, hic, em muốn xem từ đầu khi nó sử dụng view, rồi osv, orm thế nào nên em muốn đặt break point từ đầu để xem mà không được. Các anh hướng dẫn em một chút được không ạ. Sau khi nghe anh Leo nói thì em cũng hiểu dần rồi ạ nhưng vẫn chưa thật sự rõ nên muốn debug để xem mà chả được, hic
Em có thể cho anh biết đường dẫn file openerp.py mà em đặt brake point?
Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vương Thùy Chi
Best Answer

Hic hic, em ngồi debug thì gặp vấn đề thế này ạ. Khi em đặt break point tại file openerp.py thì khi chạy nó k dừng lại tại break point đó, còn khi em đặt tại một vị trí khác, giả sử như hàm unlink trong file sale.py thì nó dừng tại đó, hic, em muốn xem từ đầu khi nó sử dụng view, rồi osv, orm thế nào nên em muốn đặt break point từ đầu để xem mà không được. Các anh hướng dẫn em một chút được không ạ. Sau khi nghe anh Leo nói thì em cũng hiểu dần rồi ạ nhưng vẫn chưa thật sự rõ nên muốn debug để xem mà chả được, hic

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Leo Tran
Best Answer
1. Lớp nào sẽ dùng để nhận biết cấu trúc của file xml và khi người dùng nhập liệu rồi làm các thứ thì khi import dữ liệu nó sẽ thông qua lớp nào, phương thức nào ?Em thấy trong file orm có một phương thức là import_data()
Thằng server sẽ làm việc này, cụ thể là osv
2. Em thấy mỗi menu hay action khi khai báo đều phải có id của nó, vậy cái view này nó lưu trữ ở đâu ?
Nó được lưu trong bảng ir_ui_view (model ir.ui.view)
3. Em thấy trong file xml phải khai báo <field name="res_model">res.partner.address</field> tức là object mình muốn sử dụng để tạo View, vậy luồng hoạt động tiếp của nó sẽ là thế nào(osv sẽ lấy dữ liệu ở csdl lên view hay thế nào khác ?).
Lúc này client sẽ gửi View lên WebService trên server thông qua cổng giao tiếp RPC. WebService gọi module base để xử lý. Module base thông qua ORM để tuơng tác với database (search, read, write, unlink,…) rồi gửi về cho client theo đường vừa rồi.
Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vũ Trọng Đạt
Best Answer
Em cám ơn anh, em cũng hiểu dần rồi ạ. Anh cho phép em hỏi thêm một số thứ nữa với ạ. Trong file xml sẽ sử dụng các thẻ để hiện thị dữ liệu ra ngoài,menu, trê, form..Em muốn hỏi thế này ạ
1. Lớp nào sẽ dùng để nhận biết cấu trúc của file xml và khi người dùng nhập liệu rồi làm các thứ thì khi import dữ liệu nó sẽ thông qua lớp nào, phương thức nào ?Em thấy trong file orm có một phương thức là import_data()
2. Em thấy mỗi menu hay action khi khai báo đều phải có id của nó, vậy cái view này nó lưu trữ ở đâu ?
3. Em thấy trong file xml phải khai báo <field name="res_model">res.partner.address</field> tức là object mình muốn sử dụng để tạo View, vậy luồng hoạt động tiếp của nó sẽ là thế nào(osv sẽ lấy dữ liệu ở csdl lên view hay thế nào khác ?).
Trên đây là những điều em chưa rõ, em rất mong nhận được ý kiến của các anh. Em cảm ơn các anh rất nhiều vì đã nhiệt tình giúp đỡ em mặc dù em toàn hỏi những câu ngớ ngẩn :)
Theo mình bạn nên sử dụng bug của IDE rồi chạy từng bước.
Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vương Thùy Chi
Best Answer

Em cám ơn anh, em cũng hiểu dần rồi ạ. Anh cho phép em hỏi thêm một số thứ nữa với ạ. Trong file xml sẽ sử dụng các thẻ để hiện thị dữ liệu ra ngoài,menu, trê, form..Em muốn hỏi thế này ạ
1. Lớp nào sẽ dùng để nhận biết cấu trúc của file xml và khi người dùng nhập liệu rồi làm các thứ thì khi import dữ liệu nó sẽ thông qua lớp nào, phương thức nào ?Em thấy trong file orm có một phương thức là import_data()
2. Em thấy mỗi menu hay action khi khai báo đều phải có id của nó, vậy cái view này nó lưu trữ ở đâu ?
3. Em thấy trong file xml phải khai báo <field name="res_model">res.partner.address</field> tức là object mình muốn sử dụng để tạo View, vậy luồng hoạt động tiếp của nó sẽ là thế nào(osv sẽ lấy dữ liệu ở csdl lên view hay thế nào khác ?).
Trên đây là những điều em chưa rõ, em rất mong nhận được ý kiến của các anh. Em cảm ơn các anh rất nhiều vì đã nhiệt tình giúp đỡ em mặc dù em toàn hỏi những câu ngớ ngẩn :)

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Leo Tran
Best Answer
Vậy mình có thể hiểu là model chính là osv.osv, osv.fields…, còn controller là các class trong file purchase.py (sử dụng osv làm tham số), còn view là các file .xml đúng không ạ. Em cảm ơn các anh!
Chính xác thì như bác David nói, model ở đây là để truy cập và xử lý data, nhưng nó sẽ không làm việc trực tiếp mà thông qua thằng osv bằng cách truyền (osv.osv) vào các class trong file python.
2 Bình luận
Ảnh đại diện
Huỷ
Ảnh đại diện
ViindooBot
-

Theo như anh nói thì file purchase.py định nghĩa các object và các function để làm việc với csdl thông qua osv.osv thì nó chính là model, anh cho em hỏi cái controller ở đây là cái gì ạ. Theo như em hiểu thì controller dùng để điều hướng, ở đây thì cái nào sẽ làm nhiệm vụ đó ạ. Em cảm ơn anh

Ảnh đại diện
ViindooBot
-

file purchase.py của em ở đây có thể hiểu nó là controller. Trong quá trình controller em cần đến database (model) thì nó sẽ gọi thằng osv ra để xử lý cho em. Việc này có thể hiểu là nó chạy ngâm, vì thằng osv nó tự động xử cho em rồi. Ví dụ ở đây, trong purchase.py em có hàm là tinhtien(osv.osv). Nhiệm vụ của nó là nhờ thằng osv (model) vào database lấy dữ liệu ra co nó để nó tính toán, + - * /,... sau đó hiển thị ra ngoài (update view). Vậy có thể hiểu nó là controller, còn chức năng của model là thằng osv tự động xử lý.

0
Ảnh đại diện
Vương Thùy Chi
Best Answer

Vậy mình có thể hiểu là model chính là osv.osv, osv.fields…, còn controller là các class trong file purchase.py (sử dụng osv làm tham số), còn view là các file .xml đúng không ạ. Em cảm ơn các anh!

1 Bình luận
Ảnh đại diện
Huỷ
Ảnh đại diện
ViindooBot
-

Mình cũng hiểu như bạn

0
Ảnh đại diện
vũ đình dũng
Best Answer

Em cũng hiểu ra một chút rồi ạ, vì khi đọc tài liệu lúc thì em thấy 3 tier, lúc thì client server nên em cứ mập mờ, nếu như những gì anh Leo nói thì em rõ hơn một chút rồi ạ.

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Trần Ngọc Tuấn
Best Answer

Chủ đề này có vẻ sôi động nhỉ, tớ tham gia với :D

M ở trong MVC với trường hợp của các ứng dụng lớn như OpenERP thì nó không làm việc trực tiếp với Database (mặc dù nó vẫn chịu trách nhiệm Data Access), mà nó làm việc với Tier khác.

Tức là nguyên cả cái cụm MVC đóng vai trò làm Presentation Layer trong mô hình đa lớp của OpenERP. Lúc này, cái M trong MVC vẫn đảm nhiệm việc "nhào nặn" dữ liệu nhưng nó không làm việc trực tiếp

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vũ Trọng Đạt
Best Answer

Nghĩa là OpenERP gồm một core và các module có thể được cài đặt để cấu hình nên một OpenERP cụ thể.

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Leo Tran
Best Answer
Em cảm ơn anh đã trả lời.
Anh cho em hỏi thêm một chút thế này ạ. Trong module Purchase như hình đính kèm thì các file thể hiện MVC như thế nào. ví dụ phần view là các file .xml, phần controller là các file .py, còn phần model thì tương ứng như thế nào ạ. Em đọc trong tài liệu thấy ghi là phần model là postgreSQL tables nhưng không hiểu lắm ạ. Em cảm ơn anh nhiều!
Đúng như Dũng đã nói, trong trường hợp này có thể hiểu osv là "model". Tất cả các class trong module của OpenERP đều phải truyền osv.osv. Thằng này nó sẽ làm nhiệm vụ "model" như em hiểu.
Tuy nhiên, chúng ta nên hiểu OpenERP gồm 3 tầng: Server - Module - Client. Nguyên tắc của 3 tầng là client (presentation), không truy cập trực tiếp vào Server (Data) mà sẽ thông qua tầng Logic (Module). Đấy là cách hiểu nôm na về kiến trúc tổng thể của OpenERP trên quan điểm của cá nhân mình.
Ảnh đại diện
Huỷ
0
Ảnh đại diện
vũ đình dũng
Best Answer

Vậy osv ở đây có phải là model trong MVC không anh

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vũ Trọng Đạt
Best Answer

Chào cả nhà, trước khi thảo luận về Kiến trúc của OpenERP mình xin mạo muội trả lời câu hỏi của bạn Vuơng Tùy Chi như sau:

1. Trước tiên OpenERP là một kiến trúc 3 tầng (Three-tier architecture). Trong một ứng dụng lớn thì MVC chỉ là tầng Presentation. Nó chỉ quan tâm tới presentation và sử dụng một tầng ở giữa để cắm các model đã có dữ liệu từ tầng Data. Đó là sự khác biệt giữa kiến trúc 3 tầng và MVC.
2. Mối liên hệ giữ ORM và OSV:
- ORM là một kỹ thuật lập trình nói chung, dùng để chuyển đổi dữ liệu giữa các hệ thống không tuơng thích trong OOP. Cụ thể ở đây, bạn có một hệ thống là Python và một hệ thống PostgreSQL, 2 hệ thống này rõ ràng không tuơng thích với nhau, vậy để chuyển đổi dữ liệu giữa chúng, bạn cần sử dụng kỹ thuật ORM - nó chỉ là một kỹ thuật lập trình.
- OSV trong OpenERP là một tầng dùng để lưu trữ và xử lý dữ liệu. Bao gồm OSV (osv.osv) và OSV Memory (osv_memory). osv.osv lưu trữ và xử lý dữ liệu trong PostgreSQL, còn osv.memory lưu trữ và xử lý dữ liệu trên bộ nhớ, nó sẽ bị mất khi restart server. Để lưu trữ và xử lý dữ liệu thì OSV sử dụng kỹ thuật ORM.

2 Bình luận
Ảnh đại diện
Huỷ
Ảnh đại diện
ViindooBot
-

Em cảm ơn anh.
Theo như anh nói thì MVC ở đây chỉ là tầng Presentation của OpenERP thôi đúng không ạ. Vậy tầng ở giữa để cắm các model đã có dữ liệu ở đây là gì ạ?
Kiến trúc MVC mà anh nói là bao gồm
model : The PostgreSQL tables.
view : views are defined in XML files in OpenERP.
controller : The objects of OpenERP
mà theo anh nói thì ở đây chỉ là tầng Presentation của OpenERP, vậy những tầng khác của OpenERP là gì ạ.
Em cảm ơn anh.

Ảnh đại diện
ViindooBot
-

3 -tầng là kiểu kiến trúc, còn MVC là mẫu thiết kế. Nghĩa là trong một ứng dụng lớn người ta sẽ sử mẫu MVC trong kiểu kiến trúc 3 tầng.

Presentation Tier: "Controllers and Views"
Business Tier: "Model"
Original Data Access Tier

Như vậy tầng ở giữa mà mình nói chính là tầng Model.

0
Ảnh đại diện
vũ đình dũng
Best Answer

Em cũng đang thắc mắc về vấn đề này, rất mong các anh giúp chúng em có cái nhìn chính xác về kiến trúc của OpenERP. Em cảm ơn.

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vương Thùy Chi
Best Answer

Các anh giúp em với ạ :((

Ảnh đại diện
Huỷ
0
Ảnh đại diện
Vương Thùy Chi
Best Answer

em cũng thấy có mô hình này trong tài liệu hướng dẫn nhưng chưa được rõ lắm. Em rất mong các anh giúp em hiểu rõ hơn về mô hình kiến trúc của OpenERP. Em cảm ơn

Ảnh đại diện
Huỷ

Trả lời của bạn

Vui lòng đảm bảo câu trả lời của bạn có liên quan và giải đáp đúng nội dung câu hỏi. Nếu muốn bình luận về câu hỏi hoặc câu trả lời, hãy sử dụng công cụ Bình luận. Lưu ý, bạn có thể thay đổi nội dung trả lời thay vì trả lời lại 02 lần cho cùng một câu hỏi. Đồng thời bạn có thể nhấn nút để bầu chọn câu hỏi / câu trả lời tốt nhất.