Anda tidak mengatakan jenis logika apa yang Anda bagikan. Singkatnya, apakah ini kontroler logika atau fungsi pembantu? Dua metode berurusan dengan ini dalam bahasa berorientasi objek adalah pewarisan dan komposisi. Warisan masuk akal jika ada aksi bersama antara dua pengendali. Komposisi masuk akal sepanjang waktu. Contoh menggunakan warisan terletak pada jawaban asli saya di bawah pembagi.
Tidak jarang memiliki kelas utilitas atau kelas pembantu tergantung pada kerangka kerja Anda. Misalnya, dalam kerangka kerja Java dan C # Anda mungkin memiliki paket / namespace untuk utilitas. Di Ruby on Rails, Anda mungkin memanfaatkan Helper
kelas yang membagikan logika antara pengontrol dan tampilan. Pada dasarnya, akan terlihat seperti ini:
// NOTE: group similar functions
static class LoginUtility
{
static bool IsLoggedIn(Request request) { /* ... */ }
}
Atau, Anda bisa menjadikannya kelas yang Anda instantiate. Kunci pola kelas statis di atas adalah untuk membuat fungsi Anda fungsi murni. Dengan kata lain, Anda lulus dalam kondisi apa pun yang perlu dilakukan tugasnya, dan fungsinya tidak merujuk keadaan statis lain di sistem.
Dalam kedua kasus, Anda akan mengaksesnya di setiap pengontrol Anda seperti ini:
void MyAction()
{
if (LoginUtiltiy.IsLoggedIn(Request))
{
// Do something ...
}
}
Jawaban Asli
Anda tidak mengatakan apa platform Anda, karena itu dapat mempengaruhi jawabannya. Dengan asumsi bahwa itu adalah bahasa berorientasi objek, pendekatan yang paling umum adalah membuat kelas dasar yang diperluas oleh kedua pengontrol. Misalnya di Ruby on Rails yang mungkin Anda miliki:
class BaseController < ApplicationController
def my_special_function
# ...
end
end
class Controller1 < BaseController
# ...
end
class Controller2 < BaseController
# ...
end
Anda dapat menerjemahkan ide ke bahasa lain juga. Pendekatan yang sama akan bekerja untuk ASP.NET MVC, Apache Wicket, Grails, atau hampir semua kerangka kerja web berorientasi objek lainnya. Jika bahasa Anda tidak berorientasi objek, maka itu benar-benar tergantung pada bagaimana kerangka kerja dirancang sebagai pendekatan terbaik .