CodeWriteson
Öncelikle uygulamayı ikiye ayırıyoruz:
- Uygulama Katmanı (Application): Bu katman uygulamanın yazılımsal kısmını ifade eder. Mimari, tasarım desenleri, alt yapı, veritabanı, mail, task, kuyruk, UI, vs... Geliştirici ekibin muhatap olduğu katmandır.
- İş Katmanı (Business): Bu katman uygulamanın ne yaptığı ile alakalı, müşterinin muhatap olduğu katmandır.
Kullanıcıya haftalık mail ile rapor gönderilmesi iş katmanına ait bir ifadedir. Bu mailin kuyruğa atılıp gönderilmesi ise uygulama katmanına ait bir işlemdir. Bazı durumlarda aradaki çizgi silikleşebilir. Örneğin radyatör kelimesinin hem gündelik dilde hem de mühendislik terminolojisi içerisinde yer alan bir kavram olması gibi. Bu durumda trait kesinlikle uygulama katmanına; servis ise bazen uygulama bazen iş katmanına ait bir kavramdır.
Trait, yöntemlerin birden fazla sınıfta kullanılmasını sağlayan basit bir soyuttur. Tek başına yüklenemez, tek başına bir anlam ifade etmez. Sadece yöntemlerden, değişken ve sabitlerden oluşur. Farklı sınıflarda kullanılmasının dışında en büyük özelliği kullanılan sınıfta ezilebilmesidir.
Servis ise bir ya da birden fazla işi yapan bir iş birimidir, trait gibi dilin yapısal bir özelliği değildir. Örneğin bir HTTP isteğinden gelen veri ile bir kullanıcı oluşturur, kullanıcı oluştuğuna dair bir olay ateşler, veritabanından süzülen verileri excel olarak dışarı aktarır, banka ile haberleşerek ödeme yapılmasını sağlar... Dediğim gibi yaptığı iş uygulama katmanına da ait olabilir iş katmanına da.
Yani trait meyve sandığındaki çividir; servis ise marketteki manav reyonudur.