Hôm nay tôi đã có một cuộc tranh luận sôi nổi với một nhà phát triển khác trong tổ chức của mình về vị trí và cách thêm các phương thức vào các lớp ánh xạ cơ sở dữ liệu. Chúng tôi sử dụng sqlalchemy
và một phần chính của cơ sở mã hiện có trong các mô hình cơ sở dữ liệu của chúng tôi chỉ hơn một túi các thuộc tính được ánh xạ với tên lớp, một bản dịch gần như cơ học từ các bảng cơ sở dữ liệu sang các đối tượng python.
Trong tranh luận, quan điểm của tôi là giá trị chính của việc sử dụng ORM là bạn có thể đính kèm các hành vi và thuật toán cấp thấp vào các lớp được ánh xạ. Các mô hình là các lớp đầu tiên và liên tục thứ hai (chúng có thể được sử dụng xml liên tục trong một hệ thống tệp, bạn không cần phải quan tâm). Quan điểm của ông là mọi hành vi đều là "logic kinh doanh", và nhất thiết phải thuộc về bất cứ nơi nào ngoài mô hình liên tục, vốn chỉ được sử dụng cho sự kiên trì của cơ sở dữ liệu.
Tôi chắc chắn nghĩ rằng có một sự khác biệt giữa logic kinh doanh là gì và nên tách biệt, vì nó có một sự tách biệt với mức độ thấp hơn về cách thức được triển khai và logic miền, mà tôi tin là sự trừu tượng được cung cấp bởi các lớp mô hình đã tranh luận về đoạn trước, nhưng tôi gặp khó khăn khi đặt ngón tay vào đó là gì. Tôi hiểu rõ hơn về những gì có thể là API (trong trường hợp của chúng tôi là HTTP "ReSTful"), trong đó người dùng gọi API với những gì họ muốn làm , khác với những gì họ được phép làm và cách thức Được thực hiện.
tl; dr: Những loại điều nào có thể hoặc nên đi trong một phương thức trong một lớp được ánh xạ khi sử dụng ORM, và những gì nên bỏ đi, để sống trong một lớp trừu tượng khác?