Bạn đã không nói loại logic mà bạn đang chia sẻ. Nói tóm lại, bộ điều khiển này logic hay là hàm trợ giúp? Hai phương pháp xử lý vấn đề này trong một ngôn ngữ hướng đối tượng là kế thừa và thành phần. Kế thừa có ý nghĩa nếu có một hành động chia sẻ giữa hai bộ điều khiển. Thành phần có ý nghĩa phần còn lại của thời gian. Ví dụ về việc sử dụng tính kế thừa nằm trong câu trả lời ban đầu của tôi bên dưới dải phân cách.
Không có gì lạ khi có một lớp tiện ích hoặc một lớp trợ giúp tùy thuộc vào khung của bạn. Ví dụ: trong các khung web Java và C #, bạn có thể có một gói / không gian tên cho các tiện ích. Trong Ruby on Rails, bạn có thể tận dụng Helper
lớp chia sẻ logic giữa các bộ điều khiển và khung nhìn. Về cơ bản, nó sẽ trông như thế này:
// NOTE: group similar functions
static class LoginUtility
{
static bool IsLoggedIn(Request request) { /* ... */ }
}
Ngoài ra, bạn có thể làm cho nó một lớp bạn khởi tạo. Chìa khóa cho mẫu lớp tĩnh ở trên là làm cho các hàm của bạn hoạt động thuần túy. Nói cách khác, bạn vượt qua trong bất kỳ trạng thái nào mà nó cần để thực hiện công việc của nó và hàm không tham chiếu bất kỳ trạng thái tĩnh nào khác trong hệ thống.
Trong cả hai trường hợp, bạn sẽ truy cập nó trong mỗi bộ điều khiển của bạn như thế này:
void MyAction()
{
if (LoginUtiltiy.IsLoggedIn(Request))
{
// Do something ...
}
}
Câu trả lời gốc
Bạn đã không nói nền tảng của bạn là gì, vì điều đó có thể ảnh hưởng đến câu trả lời. Giả sử rằng đó là một ngôn ngữ hướng đối tượng, cách tiếp cận phổ biến nhất là tạo ra một lớp cơ sở mà cả hai bộ điều khiển mở rộng. Ví dụ: trong Ruby on Rails bạn có thể có:
class BaseController < ApplicationController
def my_special_function
# ...
end
end
class Controller1 < BaseController
# ...
end
class Controller2 < BaseController
# ...
end
Bạn có thể dịch ý tưởng sang các ngôn ngữ khác là tốt. Cách tiếp cận tương tự sẽ hoạt động đối với ASP.NET MVC, Apache Wicket, Grails hoặc bất kỳ khung web hướng đối tượng nào khác. Nếu ngôn ngữ của bạn không hướng đối tượng, thì nó thực sự phụ thuộc vào cách khung được thiết kế theo cách tiếp cận tốt nhất .