অ্যানমিক ডোমেন মডেল এবং ডোমেন পরিষেবাদি ইঞ্জেকশন


19

রক্তহীন ডোমেইন মডেল মার্টিন জালিয়া দ্বারা ডোমেইন চালিত নকশা বিরোধী প্যাটার্ন হিসাবে বর্ণনা করা হয়েছে। ডোমেন মডেলগুলিতে ব্যবসায়িক যুক্তি রাখতে প্রায়শই ডোমেন পরিষেবা ব্যবহৃত হয়। তবে ডোমেন মডেলগুলিতে ডোমেন পরিষেবাগুলি ইনজেক্ট করা ভন ভার্নন ("ডোমেন-ড্রাইভড ডিজাইন বাস্তবায়ন, পৃষ্ঠা 387 দেখুন) দ্বারা ক্ষতিকারক হিসাবে বিবেচিত হয়।

আমার মতে সেই মতামতগুলি পরস্পরবিরোধী, এটা কি সত্য? উভয় বিষয় বিবেচনা করা যেতে পারে?

এটি কি ডোমেন পরিষেবাদিগুলির সাথে সত্যই সমৃদ্ধ ডোমেন মডেল বনাম রক্তাল্পিক ডোমেন মডেল এবং সাধারণ ডোমেন পরিষেবাগুলি সংযুক্ত করে ?


4
আমি কোন এই বিশেষজ্ঞ উপায়ে, কিন্তু আমার মনে হয়েছে টাইপ যুক্তি যে ডোমেইন পরিষেবাগুলিতে এবং ডোমেইন সত্ত্বা ঢুকে মৌলিকভাবে ভিন্ন ছিল। সত্তাগুলিতে যে যুক্তি চলে সে হ'ল অবজেক্টটিকে সঠিক অবস্থায় রাখার জন্য প্রয়োজনীয় যুক্তি। এর মধ্যে বৈধতা এবং রূপান্তর যুক্তি জড়িত। অন্যদিকে ডোমেন পরিষেবাগুলি উচ্চ স্তরের যুক্তির জন্য। সুতরাং, উদাহরণস্বরূপ, একটি ডোমেন পরিষেবা এমন একটি ব্যবসায়িক প্রক্রিয়া মডেল করবে যাতে একাধিক বিভিন্ন ধরণের সত্তা জড়িত জটিল উপায়।
মেটাফাইট

2
@ মেটাফাইট: এমনকি যদি কোনও ব্যবসায়িক প্রক্রিয়া জটিল উপায়ে একাধিক সত্তাকে প্রভাবিত করে, আপনি একটি ভাল সমষ্টিগত রুট ডোমেন মডেল প্রদানের কোনও পরিষেবা ছাড়াই এটি অর্জন করতে পারেন, অর্থাত্, এমন একটি ডোমেন মডেল যা সমস্ত প্রভাবিত সংস্থাগুলিতে নিজেই সম্পত্তি বা ক্ষেত্র হিসাবে অ্যাক্সেস পেয়েছে।
গ্রেগ বার্গার্ট

এটি উপলব্ধি করে :)
মেটাফাইট

উত্তর:


16

রক্তাল্পতা মডেল কেবল একটি ডেটা ধারক। এতে আচরণ থাকে না। (এটি সম্ভবত কার্যকরী দৃষ্টান্তের জন্য একটি ভাল জিনিস হিসাবে বিবেচিত হতে পারে)) অ্যানিমিক মডেলের বিপরীত কোনও ডোমেন পরিষেবায় পূর্ণ ইনজেকশনের মডেল নয় । আপনি দুটি চূড়ান্ত বর্ণনা দিচ্ছেন - উভয়ই খারাপ।

আপনার যদি অ্যানিমিক মডেল থাকে তবে আপনি ওওপি যা সরবরাহ করেন তা পুরোপুরি গ্রহণ করছেন না। আপনি যদি সেই মডেলগুলিতে পরিষেবাগুলি ইনজেকশন শুরু করেন, আপনি সম্ভবত সেখানে উদ্বেগগুলি উদ্ভাবন করছেন that তা হয় বা আপনার মডেলটি আপনার ভাবার চেয়ে রক্তস্বল্প। প্রয়োজন নেই তবে অনুপস্থিত এমন কিছু সরবরাহ করে না কেন আপনার আর অন্য পরিষেবাটির দরকার পড়বে কেন? (অনুপস্থিতির অর্থ রক্তাল্পতা হতে পারে))

উভয় "বলি" এড়ানো শক্তিশালী নকশার দিকে নিয়ে যায়। মডেলটির যে কোনও পরিষেবাতে আপনার প্রয়োজন এমন কিছু আছে? হয়তো এটি মডেল স্থানান্তরিত করা উচিত। যদি তা না হয় তবে আপনার উদ্বেগগুলি পুনর্বিবেচনা করা উচিত। কোনও মডেলের আচরণটি মডেলের অভ্যন্তরে কাজ করা উচিত । এটি প্রধানত (কেবল না তবে) সদস্যদের সাথে নিজেকে উদ্বেগ করা উচিত। তবে মনে রাখবেন, মডেলটিতে বা তার সাথে কাজ করে এমন কিছু জিনিস থাকবে । উদাহরণস্বরূপ, মডেলগুলি কোনওরকম জড়িত থাকলেও টিসিপি সংযোগগুলি খোলার বা ইউআই ইভেন্টগুলি শোনা উচিত নয়। অন্য কেউ দায়িত্ব এবং যে কেউ কখনো জন্যে ভিতরে মডেল।


7
আমি মনে রাখতে চাই একটি ভাল পার্থক্য হ'ল আপনার ডোমেন মডেলটি ব্যবসায়িক যুক্তি প্রয়োগ করে এবং আপনার ডোমেন পরিষেবাগুলি ডোমেন মডেলগুলিতে ব্যবসায়িক যুক্তি কার্যকর করে। পার্থক্যটি হ'ল কে কে ডাকে। পরিষেবাগুলি ডোমেন মডেল পদ্ধতিগুলিতে কল করতে পারে। যদি ডোমেন মডেলগুলি পরিষেবা পদ্ধতিগুলিতে কল করে, আপনি তার মাথার উপরে প্যাটার্নটি ফ্লিপ করেছেন।
গ্রেগ বার্গার্ট

7

এটি পরস্পরবিরোধী নয়। উভয় প্রবক্তারই আপনি নিজের প্রকৃত কোডটি ডোমেন অবজেক্টে রেখে দিতে চান।

অর্থাত।

public class Order
{
    private string status = "not bought";
    public void Buy()
    {
        this.status = "bought";
    }
}

বনাম এডিএম

public class Order
{
    public string Status = "not bought";
}

public class BuyingService
{
    public Order Buy(Order order)
    {
         Order o = new Order();
         o.status = "bought";
         return o;
    }
}

বনাম ইনজেকশন সেবা

public class Order
{
    public Order(IBuyingService bs)
    {
        _bs = bs;
    }
    private IbuyingService _bs;
    private string status = "not bought";
    public void Buy()
    {
        this.status = _bs.Buy();
    }
}

public class BuyingService : IBuyingService
{
    public string Buy()
    {
         return = "bought";
    }
}

স্পষ্টভাবে যদিও প্রতিটি পদ্ধতির প্লাস এবং বিয়োগ রয়েছে। আপনি যেটি চয়ন করেন সেটি মূলত ব্যক্তিগত পছন্দের বিষয়

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.