(আপনি যদি পড়ার মতো মনে করেন না, নীচে একটি সংক্ষিপ্তসার রয়েছে :-)
আমিও অ্যাপ্লিকেশন পরিষেবাগুলির সুনির্দিষ্ট সংজ্ঞা দিয়ে লড়াই করেছি। যদিও বিজয়ের উত্তর আমার চিন্তা প্রক্রিয়ায় একমাস আগে খুব সহায়ক হয়েছিল, আমি এর অংশটির সাথে একমত হইনি।
অন্যান্য উৎস
অ্যাপ্লিকেশন পরিষেবা সম্পর্কে খুব কম তথ্য আছে। সামগ্রিক শিকড়, সংগ্রহশালা এবং ডোমেন পরিষেবাদির মতো বিষয়গুলি ব্যাপকভাবে আলোচনা করা হয়, তবে অ্যাপ্লিকেশন পরিষেবাগুলি কেবল সংক্ষেপে উল্লেখ করা হয় বা পুরোপুরি বাদ দেওয়া হয়।
এমএসডিএন ম্যাগাজিন নিবন্ধটি ডোমেন-চালিত ডিজাইনের পরিচিতি অ্যাপ্লিকেশন পরিষেবাগুলিকে আপনার ডোমেন মডেলটিকে বাহ্যিক ক্লায়েন্টগুলিতে রূপান্তর এবং / অথবা এক্সপোজার করার উপায় হিসাবে বর্ণনা করেছে, যেমন ডাব্লুসিএফ পরিষেবা হিসাবে। বিজয় অ্যাপ্লিকেশন পরিষেবাগুলিকেও এভাবে বর্ণনা করে। এই দৃষ্টিকোণ থেকে, অ্যাপ্লিকেশন পরিষেবাগুলি আপনার ডোমেনের একটি ইন্টারফেস ।
পেঁয়াজ আর্কিটেকচারে জেফ্রি পলর্মো এর প্রবন্ধ (পার্ট এক , দুই এবং তিন ) একটি ভাল পঠিত হয়। তিনি অ্যাপ্লিকেশন পরিষেবাগুলিকে অ্যাপ্লিকেশন-স্তরের ধারণা হিসাবে ব্যবহার করে যেমন ব্যবহারকারীর সেশন। যদিও এটি অ্যাপ্লিকেশন পরিষেবাদি সম্পর্কে আমার বোধগম্যতার কাছাকাছি, তবুও এটি বিষয়টিতে আমার চিন্তার সাথে সামঞ্জস্য নয়।
আমার চিন্তা
আমি অ্যাপ্লিকেশন পরিষেবাগুলি অ্যাপ্লিকেশন দ্বারা সরবরাহিত নির্ভরতা হিসাবে ভাবতে এসেছি । এই ক্ষেত্রে অ্যাপ্লিকেশনটি কোনও ডেস্কটপ অ্যাপ্লিকেশন বা ডাব্লুসিএফ পরিষেবা হতে পারে।
ডোমেইন
একটি উদাহরণ জন্য সময়। আপনি আপনার ডোমেন দিয়ে শুরু করবেন। বাহ্যিক সংস্থার উপর নির্ভর করে না এমন সমস্ত সত্তা এবং যে কোনও ডোমেন পরিষেবা এখানে প্রয়োগ করা হয়েছে। বাহ্যিক সংস্থানগুলির উপর নির্ভর করে যে কোনও ডোমেন ধারণাগুলি একটি ইন্টারফেস দ্বারা সংজ্ঞায়িত করা হয়। এখানে একটি সম্ভাব্য সমাধান বিন্যাস (সাহসীভাবে প্রকল্পের নাম):
আমার সমাধান
- My.Product.Core (My.Product.dll)
- ডোমেন সার্ভিসেস
IExchangeRateService
প্রোডাক্ট
ProductFactory
IProductRepository
Product
এবং ProductFactory
শ্রেণীর কোর সমাবেশ বাস্তবায়িত হয়েছে। IProductRepository
এমন কিছু বিষয় যা সম্ভবত একটি ডাটাবেস সমর্থন করা হয়। এর বাস্তবায়ন ডোমেনের উদ্বেগ নয় এবং তাই একটি ইন্টারফেস দ্বারা সংজ্ঞায়িত।
আপাতত, আমরা এর উপর ফোকাস করব IExchangeRateService
। এই পরিষেবার জন্য ব্যবসায়ের যুক্তি একটি বহিরাগত ওয়েব পরিষেবা দ্বারা প্রয়োগ করা হয়। যাইহোক, এর ধারণাটি এখনও ডোমেনের অংশ এবং এই ইন্টারফেস দ্বারা প্রতিনিধিত্ব করা হয়।
অবকাঠামো
বাহ্যিক নির্ভরতা প্রয়োগের প্রয়োগের অবকাঠামোর অংশ:
আমার সমাধান
+ My.Product.Core (My.Product.dll)
- মাই.প্রডাক্ট। ইনফ্রাস্ট্রাকচার (মাই.প্রডাক্ট। ইনফ্রাস্ট্রাকচার.ডিল)
- ডোমেন সার্ভিসেস
XEExchangeRateService
SqlServerProductRepository
XEExchangeRateService
xe.com এরIExchangeRateService
সাথে যোগাযোগ করে ডোমেন পরিষেবা প্রয়োগ করে । এই প্রয়োগটি আপনার অ্যাপ্লিকেশনগুলি ব্যবহার করতে পারে যা আপনার ডোমেন মডেলটি অবকাঠামোগত সমাবেশকে অন্তর্ভুক্ত করে ব্যবহার করে।
আবেদন
মনে রাখবেন যে আমি এখনও অ্যাপ্লিকেশন পরিষেবাদির উল্লেখ করি নি। আমরা এখন তাদের তাকান। ধরা যাক আমরা একটি IExchangeRateService
বাস্তবায়ন সরবরাহ করতে চাই যা দ্রুত অনুসন্ধানের জন্য ক্যাশে ব্যবহার করে। এই সাজসজ্জার শ্রেণীর রূপরেখার মতো দেখতে পারে।
public class CachingExchangeRateService : IExchangeRateService
{
private IExchangeRateService service;
private ICache cache;
public CachingExchangeRateService(IExchangeRateService service, ICache cache)
{
this.service = service;
this.cache = cache;
}
// Implementation that utilizes the provided service and cache.
}
ICache
প্যারামিটার লক্ষ্য করুন ? এই ধারণাটি আমাদের ডোমেনের অংশ নয়, সুতরাং এটি কোনও ডোমেন পরিষেবা নয়। এটি একটি অ্যাপ্লিকেশন পরিষেবা । এটি আমাদের অবকাঠামোর নির্ভরতা যা অ্যাপ্লিকেশন সরবরাহ করতে পারে। আসুন এমন একটি অ্যাপ্লিকেশন প্রবর্তন করুন যা এটি দেখায়:
আমার সমাধান
- My.Product.Core (My.Product.dll)
- ডোমেন সার্ভিসেস
IExchangeRateService
প্রোডাক্ট
ProductFactory
IProductRepository
- মাই.প্রডাক্ট। ইনফ্রাস্ট্রাকচার (মাই.প্রডাক্ট। ইনফ্রাস্ট্রাকচার.ডিল)
- অ্যাপ্লিকেশন সার্ভিস
ICache
- ডোমেন সার্ভিসেস
CachingExchangeRateService
XEExchangeRateService
SqlServerProductRepository
- মাই.প্রডাক্ট.ডব্লিউসিএফস সার্ভিস (মাই.প্রডাক্ট।
- অ্যাপ্লিকেশন সার্ভিস
MemcachedCache
IMyWcfService.cs
+ মাইডাব্লুসিএফসোর্স.সিভিসি
+ ওয়েবকনফিগ
এই সমস্ত অ্যাপ্লিকেশনটিতে এই জাতীয় একত্রিত হয়:
// Set up all the dependencies and register them in the IoC container.
var service = new XEExchangeRateService();
var cache = new MemcachedCache();
var cachingService = new CachingExchangeRateService(service, cache);
ServiceLocator.For<IExchangeRateService>().Use(cachingService);
সারসংক্ষেপ
একটি সম্পূর্ণ অ্যাপ্লিকেশনটিতে তিনটি প্রধান স্তর থাকে:
ডোমেন স্তরটিতে ডোমেন সত্তা এবং একা থাকা ডোমেন পরিষেবা রয়েছে। যে কোনও ডোমেন ধারণাগুলি (এতে ডোমেন পরিষেবাগুলি অন্তর্ভুক্ত রয়েছে তবে ভান্ডারগুলিও অন্তর্ভুক্ত রয়েছে) যা বাহ্যিক সংস্থার উপর নির্ভর করে ইন্টারফেস দ্বারা সংজ্ঞায়িত হয়।
অবকাঠামো স্তরটিতে ডোমেন স্তর থেকে ইন্টারফেসের প্রয়োগ রয়েছে। এই প্রয়োগগুলি অ্যাপ্লিকেশন সরবরাহ করতে হবে এমন নতুন নন-ডোমেন নির্ভরতা প্রবর্তন করতে পারে। এগুলি অ্যাপ্লিকেশন পরিষেবা এবং ইন্টারফেস দ্বারা প্রতিনিধিত্ব করা হয়।
অ্যাপ্লিকেশন স্তরটিতে অ্যাপ্লিকেশন পরিষেবাদির প্রয়োগ রয়েছে। যদি পরিকাঠামো স্তর দ্বারা সরবরাহিত প্রয়োগগুলি পর্যাপ্ত না হয় তবে অ্যাপ্লিকেশন স্তরটিতে ডোমেন ইন্টারফেসের অতিরিক্ত প্রয়োগও থাকতে পারে।
যদিও এই দৃষ্টিকোণ পরিষেবার সাধারণ ডিডিডি সংজ্ঞার সাথে মেলে না, এটি ডোমেনটিকে অ্যাপ্লিকেশন থেকে আলাদা করে দেয় এবং আপনাকে বেশ কয়েকটি অ্যাপ্লিকেশনের মধ্যে ডোমেন (এবং অবকাঠামো) সমাবেশ ভাগ করে নিতে দেয়।