ডিটিও ব্যবহারের সত্তা


15

বেসিক টায়ার্ড ওয়েব অ্যাপ্লিকেশনটির জন্য একটি প্রবাহ নিয়ে আসার চেষ্টা করা হয়েছে এবং অনলাইনে বিবাদমূলক তথ্য পড়ছে। আমি যা খুঁজে বের করার চেষ্টা করছি তা হ'ল যদি আপনার ডিএও থেকে পরিষেবা স্তর পর্যন্ত কোনও ধরণের ম্যাপার ব্যবহারের মাধ্যমে ডিটিও অবজেক্ট ব্যবহার করার কোনও সুবিধা থাকে।

আমি পূর্বে যে প্রাথমিক প্রবাহটি দেখছিলাম তা হ'ল:

  1. UI মডেল / ফর্ম -> নিয়ামক
  2. নিয়ামক মডেলটিকে ডোমেন অবজেক্টে (সত্তা) রূপান্তরিত করে
  3. ডোমেন অবজেক্ট -> পরিষেবা স্তর
  4. ডোমেন অবজেক্ট -> ডিএও
  5. ডিএও -> ডোমেন অবজেক্ট (গুলি)
  6. পরিষেবা -> ইউআই
  7. UI ডোমেনটিকে UI মডেলগুলিতে রূপান্তর করে

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

এটি কি এই ক্ষেত্রে, বা ডিটিওগুলিকে ডিএও স্তরের মধ্যে ডোমেন অবজেক্টগুলি পুরোপুরি আবদ্ধ করতে ব্যবহার করা উচিত এবং যদি এটি হয় তবে পরিষেবা স্তরটি ডিএওতে কী যাবে?

একটি গুচ্ছ ধন্যবাদ!

উত্তর:


20

আমার মতে, জেপিএ দ্বারা পরিচালিত শিমের মতো একটি অবিচলিত পোজো পাস করা ভাল অভ্যাস নয়।

কেন?

আমি তিনটি প্রধান কারণ দেখতে পাচ্ছি:

  1. অলস সংগ্রহ সহ সম্ভাব্য সমস্যা। http://java.dzone.com/articles/avoid-lazy-jpa-collections
  2. সত্তার আচরণ থাকতে হবে ( অ্যানিমিক ডোমেন মডেলের বিপরীতে ) আপনি আপনার ইউআইকে কিছু অপ্রত্যাশিত আচরণ করতে দিতে চান না।
  3. রক্তাল্পতাযুক্ত ডোমেন মডেলের ক্ষেত্রে আপনি আপনার মডেল কাঠামোটি ইউআইতে প্রকাশ করতে চাইতে পারেন না, কারণ মডেলটিতে প্রতিটি নতুন পরিবর্তন ইউআই ভেঙে দিতে পারে।

আমি আমার পরিষেবা স্তরটিকে দু'দিকেই ডিটিওর সাথে সংশ্লিষ্ট ডিটিওতে রূপান্তরিত করতে পছন্দ করি। ডিএও এখনও সত্তা ফিরিয়ে দিচ্ছে (রূপান্তরটি নিশ্চিত করা এটির কাজ নয়)।


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

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

আহ ঠিক আছে, হিক্কারটি আমি বুঝতে পারছিলাম না। আমি যেখানে কাজ করি সেখানে অ্যানিমিক ডোমেন মডেলটি বেশ সাধারণ এবং আমি একটি পাতলা পরিষেবা স্তরকে উত্সাহ দেওয়ার জন্য দৃষ্টান্তটি কিছুটা স্থানান্তরিত করার চেষ্টা করছি। আবার ধন্যবাদ!
দার্দো

@ দরদো আপনি এই বইটি পড়তে পারেন। :) গ্রেট মহান বই; (বা আপনার কোম্পানির তা প্রদর্শন) amazon.com/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/...
Mik378

প্রকৃতপক্ষে এটিকে একটি কিন্ডেল , অ্যামাজন
ডমোইন -ড্রাইভেন

13

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

এটা সত্য, এটি পিটা তবে এটি করার কয়েকটি কারণ রয়েছে (উপরে বর্ণিতগুলি ছাড়াও)।

  • ডোমেন অবজেক্টগুলি খুব ভারী হয়ে উঠতে পারে এবং কলটির জন্য প্রচুর অকেজো তথ্য থাকতে পারে। এই ব্লাটটি ইউআই-কে ধীর করে দেয় কারণ সমস্ত ডেটা সংক্রমণ, মার্শাল্ড / আনমারশেল্ড এবং পার্স করা হয়েছে। আপনি যখন কোনও এফই বিবেচনা করেন তখন আপনার ওয়েব সার্ভিসগুলি উল্লেখ করে এবং এজেএক্স বা অন্য কোনও মাল্টি-থ্রেড পদ্ধতির সাথে ডাকা হওয়ার সাথে সাথে আপনার লিঙ্কগুলিকে অলস করে দেবে links এই সমস্ত ওয়েবসার্চগুলির সাধারণ স্কেলিবিলিটিতে আসে
  • খুব বেশি ডেটা প্রকাশ করে সুরক্ষা সহজেই আপস করা যায়। আপনি যদি ডিটিও ফলাফল থেকে অপসারণ না করেন তবে সর্বনিম্ন আপনি ব্যবহারকারীদের ইমেল ঠিকানা এবং ফোন নম্বর প্রকাশ করতে পারেন।
  • ব্যবহারিক বিবেচনাগুলি: 1 টি অবজেক্টের জন্য স্থায়ী ডোমেন অবজেক্ট এবং একটি ডিটিও হিসাবে প্যারেড করতে কোডের চেয়ে বেশি টিকা থাকতে হবে। স্তরটির মধ্য দিয়ে যাওয়ার সাথে সাথে অবজেক্টের স্থিতি পরিচালনা করতে আপনার বেশ কয়েকটি সমস্যা থাকবে। সাধারণভাবে এটি পিআইটিএর আরও অনেক কিছু পরিচালনা করার জন্য কেবল কোনও ডোমেন অবজেক্ট থেকে কোনও ডিটিওতে অনুলিপি করার ক্ষেত্রগুলি করে।

তবে, আপনি যদি রূপান্তর শ্রেণীর সংকলনে অনুবাদ যুক্তিটি সজ্জিত করেন তবে আপনি এটি মোটামুটি কার্যকরভাবে পরিচালনা করতে পারেন

ল্যাম্বদাজে একবার দেখুন যেখানে আপনি 'ডোমেনওবিজে, টুডো) ​​রূপান্তর করতে পারেন' সংগ্রহের সাথে ব্যবহারের জন্য এটির একটি ওভারলোড রয়েছে। এটি একটি নিয়ামক পদ্ধতির উদাহরণ যা এটি ব্যবহার করে। আপনি দেখতে পাচ্ছেন, এটি এত খারাপ দেখাচ্ছে না।

    @GET
    @Path("/{id}/surveys")
    public RestaurantSurveys getSurveys(@PathParam("id") Restaurant restaurant, @QueryParam("from") DateTime from, @QueryParam("to") DateTime to) {

        checkDateRange(from, to);

        MultiValueMap<Survey, SurveySchedule> surveysToSchedules = getSurveyScheduling(restaurant, from, to);
        Collection<RestaurantSurveyDto> surveyDtos = convert(surveysToSchedules.entrySet(), SurveyToRestaurantSurveyDto.getInstance());
        return new RestaurantSurveys(restaurant.getId(), from, to, surveyDtos);

    }

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