কোনও উপস্থাপকের উপস্থাপকের সাথে ম্যাপিংয়ের ওওপি উপায় পরিষ্কার করুন


13

আমি জাভা, যেখানে প্রতিটি টুকরা নিজস্ব প্রকার (ভালো হয় (যেমন দাবা হিসাবে) একটি বোর্ড খেলা তৈরি করছি Pawn, Rookইত্যাদি)। অ্যাপ্লিকেশনটির জিইউআই অংশের জন্য আমার এই টুকরোটির প্রতিটি জন্য একটি চিত্র দরকার। যেহেতু করছেন মত ​​করে

rook.image();

ইউআই এবং ব্যবসায়িক যুক্তির বিচ্ছেদ লঙ্ঘন করে, আমি প্রতিটি টুকরোর জন্য একটি পৃথক উপস্থাপক তৈরি করব এবং তারপরে টুকরার প্রকারগুলি তাদের সম্পর্কিত উপস্থাপকদের মতো ম্যাপ করব will

private HashMap<Class<Piece>, PiecePresenter> presenters = ...

public Image getImage(Piece piece) {
  return presenters.get(piece.getClass()).image();
}

এ পর্যন্ত সব ঠিকই. যাইহোক, আমি বোধ করি একটি বিচক্ষণ ওওপি গুরু কোনও getClass()পদ্ধতি কল করার সময় ভ্রান্ত হবে এবং উদাহরণস্বরূপ দর্শনার্থীর ব্যবহারের পরামর্শ দিবে:

class Rook extends Piece {
  @Override 
  public <T> T accept(PieceVisitor<T> visitor) {
    return visitor.visitRook(this);
  }
}

class ImageVisitor implements PieceVisitor<Image> {
  @Override  
  public Image visitRook(Rook rook) {
    return rookImage;
  } 
}

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


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

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

@ জুলস এবং প্রতিটি টুকরা নিজের মধ্যে আচরণ সহ প্রতিটি টুকরা পৃথক শ্রেণীর জন্য একটি কৌশল থাকার কী লাভ হবে?
লিশাক

2
পৃথক টুকরো পুনর্বারিত রাষ্ট্রীয় বস্তুগুলি থেকে গেমের নিয়মগুলি পৃথক করার একটি স্পষ্ট সুবিধা হ'ল এটি আপনার সমস্যাটি তাত্ক্ষণিকভাবে সমাধান করে। কোনও টার্ন ভিত্তিক বোর্ড গেমটি প্রয়োগ করার সময় আমি সাধারণত রোল মডেলটিকে রাজ্য মডেলের সাথে মিশ্রিত করব না।
আসুন

2
আপনি যদি নিয়মগুলি আলাদা করতে না চান, তবে আপনি ছয়টি পিসটাইপ অবজেক্টে (ক্লাস নয়!) গতিবিধির নিয়মগুলি সংজ্ঞায়িত করতে পারেন। যাইহোক, আমি মনে করি আপনি যে ধরণের সমস্যার মুখোমুখি হচ্ছেন তা এড়ানোর সর্বোত্তম উপায় হ'ল উদ্বেগ আলাদা করা এবং উত্তরাধিকার সত্যই কার্যকর হলেই ব্যবহার করা।
আসুন

উত্তর:


10

উদাহরণস্বরূপ, getClass () ইত্যাদি ছাড়াই একটি পরিষ্কার ওওপি সমাধান রয়েছে যা এই ধরণের এক্সটেনসিবিলিটির জন্য অনুমতি দেবে?

হ্যা এখানে.

আমাকে এটা জিজ্ঞাস করতে দাও. আপনার বর্তমান উদাহরণগুলিতে আপনি চিত্রগুলিতে টুকরো প্রকারের মানচিত্রের উপায়গুলি সন্ধান করছেন। এটি কীভাবে কোনও টুকরো স্থানান্তরিত হওয়ার সমস্যা সমাধান করবে?

টাইপ সম্পর্কে জিজ্ঞাসা করা তুলনায় আরো শক্তিশালী কৌশল অনুসরণ করা হয় বলছি, জিজ্ঞাসা করবেন না । প্রতিটি টুকরা যদি একটি PiecePresenterইন্টারফেস নিয়ে থাকে এবং এটি দেখতে এরকম দেখাচ্ছে:

class PiecePresenter implements PieceOutput {

  BoardPresenter board;
  Image pieceImage;

  @Override
  PiecePresenter(BoardPresenter board, Image image) {
    public void display(int rank, int file) {
      board.display(pieceImage, rank, file);
    } 
  }
}

নির্মাণটি এরকম কিছু দেখায়:

rookWhiteImage = new Image("Rook-White.png");
PieceOutput rookWhiteOutPort = new PiecePresenter(boardPresenter, rookWhiteImage);
PieceInput rookWhiteInPort = new Rook(rookWhiteOutPort);
board[0, 0] = rookWhiteInPort;

ব্যবহারের মতো দেখতে কিছু হবে:

board[rank, file].display(rank, file);

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

এটি পলিমারফিজমের অনুমতি দেয়। আপনি কি কথা বলছেন তা যত্নবান হন না। আপনি কী বলছেন তা পরোয়া করেন না। আপনি কেবল যত্নবান হন যে এটি আপনার যা করা দরকার তা করতে পারে।

একটি ভাল ডায়াগ্রাম যে পৃথক স্তরে এই রাখে, বলতে চি--জিজ্ঞাসা অনুসরণ করে, এবং শো কিভাবে অন্যায়ভাবে স্তর না দম্পতি স্তর হয় এই :

এখানে চিত্র বর্ণনা লিখুন

এটি ব্যবহারের ক্ষেত্রে স্তরটি যোগ করে যা আমরা এখানে ব্যবহার করি নি (এবং অবশ্যই যোগ করতে পারি) তবে নীচের ডানদিকে আপনি দেখতে একই প্যাটার্নটি অনুসরণ করছেন।

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


2
আমি মনে করি এটি সম্ভবত একটি ভাল উত্তর (+1), তবে আমি নিশ্চিত নই যে আপনার সমাধানটি ক্লিন আর্কিটেকচারের একটি ভাল উদাহরণ: রুক সত্তা এখন সরাসরি উপস্থাপকের কাছে একটি রেফারেন্স ধারণ করে। ক্লিন আর্কিটেকচারটি কি এই জাতীয় সংমিশ্রণটি আটকাতে চাইছে না? এবং আপনার উত্তরটি কী পুরোপুরি বানান করে না: সত্তা এবং উপস্থাপকদের মধ্যে ম্যাপিং এখন যে কেউ সত্তাকে ইনস্ট্যান্ট করে তা পরিচালনা করে। এটি বিকল্প সমাধানগুলির চেয়ে সম্ভবত মার্জিত, তবে নতুন সত্তা যুক্ত করা হলে এটি পরিবর্তন করার তৃতীয় স্থান - এখন, এটি কোনও ভিজিটর নয়, একটি কারখানা।
আমন

@ আমন, যেমনটি আমি বলেছি, ব্যবহারের ক্ষেত্রে স্তরটি অনুপস্থিত। টেরি প্র্যাচেট এই ধরণের জিনিসকে "শিশুদের কাছে মিথ্যা" বলে অভিহিত করেছিলেন। আমি অপ্রতিরোধ্য একটি উদাহরণ তৈরি করার চেষ্টা করছি না। আপনি যদি ভাবেন যে আমাকে ক্লিন আর্কিটেকচারের স্কুলে নিয়ে যাওয়া দরকার তবে আমি আপনাকে আমায় এখানে টাস্কে নিয়ে যাওয়ার আমন্ত্রণ জানাচ্ছি ।
candied_orange

দুঃখিত, না, আমি আপনাকে স্কুল করতে চাই না, আমি কেবল এই স্থাপত্যের ধরণটি আরও ভালভাবে বুঝতে চাই understand আমি আক্ষরিক অর্থে একটি মাসেরও কম আগে "পরিষ্কার আর্কিটেকচার" এবং "ষড়ভুজ আর্কিটেকচার" ধারণাগুলি জুড়ে এসেছি।
আমন

সেক্ষেত্রে @ আমন এটিকে খুব ভাল চেহারা দিন এবং তারপরে আমাকে কাজে লাগান। আপনি যদি এটা করতে চাই। আমি এখনও এর কিছু অংশ বের করছি। এই মুহুর্তে আমি এই স্টাইলে একটি মেনু চালিত অজগর প্রকল্পটি আপগ্রেড করার কাজ করছি। ক্লিন আর্কিটেকচারের একটি সমালোচনা পর্যালোচনা এখানে পাওয়া যাবে
candied_orange

1
@ ইলিশাক ইনস্ট্যান্টেশন মূলত ঘটতে পারে। অভ্যন্তরীণ স্তরগুলি বাইরের স্তরগুলি সম্পর্কে জানে না। বাইরের স্তরগুলি কেবল ইন্টারফেস সম্পর্কে জানে।
candied_orange

5

ওটা সম্পর্কে কি:

আপনার মডেল (চিত্র ক্লাস) এর একটি সাধারণ পদ্ধতি রয়েছে যা আপনার অন্যান্য প্রসঙ্গেও প্রয়োজন হতে পারে:

interface ChessFigure {
  String getPlayerColor();
  String getFigureName();
}

একটি নির্দিষ্ট চিত্র প্রদর্শনের জন্য ব্যবহৃত চিত্রগুলি একটি নামকরণ স্কিমা দ্বারা ফাইলের নাম পান:

King-White.png
Queen-Black.png

তারপরে আপনি জাভা ক্লাস সম্পর্কে তথ্য অ্যাক্সেস না করে উপযুক্ত চিত্রটি লোড করতে পারেন।

new File(FIGURE_IMAGES_DIR,
         String.format("%s-%s.png",
                       figure.getFigureName(),
                       figure.getPlayerColor)));

আমি যখন সম্ভাব্যভাবে বর্ধমান শ্রেণীর সংস্থার সাথে কিছু তথ্য (কেবল চিত্রগুলিই না) সংযুক্ত করার প্রয়োজন তখন এই ধরণের সমস্যার সাধারণ সমাধানে আমি আগ্রহী। "

আমি মনে করি আপনার এত বেশি ক্লাসে ফোকাস করা উচিত নয় । বরং ব্যবসায়িক বিষয়গুলির ক্ষেত্রে বিবেচনা করুন

এবং জেনেরিক সমাধানটি হ'ল কোনও ধরণের ম্যাপিং । আইএমএইচও কৌশলটি ম্যাপিংটি কোড থেকে এমন একটি উত্সে স্থানান্তর করা যা বজায় রাখা সহজ।

আমার উদাহরণটি এই ম্যাপিংটি কনভেনশন করে যা বাস্তবায়ন করা বেশ সহজ এবং ব্যবসায়ের মডেলটিতে সম্পর্কিত সম্পর্কিত তথ্য যুক্ত করতে এড়ানো হয় । অন্যদিকে আপনি এটিকে একটি "লুকানো" ম্যাপিং হিসাবে বিবেচনা করতে পারেন কারণ এটি কোথাও প্রকাশ করা হয়নি।

আর একটি বিকল্প হ'ল এটিকে পৃথক ব্যবসায়িক কেস হিসাবে নিজের নিজস্ব এমভিসি-স্তরগুলির সাথে ম্যাপিংয়ের সাথে থাকা অধ্যবসায় স্তর সহ দেখতে পাওয়া।


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

3
@ ইলিশাক: আপনার সাধারণ সামগ্রীতে পর্যাপ্ত মেটা ডেটা সরবরাহ করার জন্য এখানে সাধারণ পদ্ধতি হ'ল যাতে কোনও সংস্থান বা ব্যবহারকারী ইন্টারফেসের উপাদানগুলিতে একটি সাধারণ ম্যাপিং স্বয়ংক্রিয়ভাবে করা যায়।
ডক ব্রাউন

2

আমি প্রতিটি টুকরাটির জন্য পৃথক ইউআই / ভিউ ক্লাস তৈরি করব যাতে ভিজ্যুয়াল তথ্য রয়েছে। এই পিসভিউ ক্লাসগুলির প্রত্যেকটিরই তার মডেল / ব্যবসায়িক অংশের জন্য একটি পয়েন্টার রয়েছে যা এতে পিসের অবস্থান এবং গেমের নিয়ম ধারণ করে।

সুতরাং উদাহরণস্বরূপ একটি মোহর নিন:

class Pawn : public Piece {
public:
    Vec2 position() const;
    /**
     The rest of the piece's interface
     */
}

class PawnView : public PieceView {
public:
    PawnView(Piece* piece) { _piece = piece; }
    void drawSelf(BoardView* board) const{
         board.drawPiece(_image, _piece->position);
    }
private:
    Piece* _piece;
    Image _image;
}

এটি যুক্তি এবং ইউআইয়ের সম্পূর্ণ পৃথককরণের অনুমতি দেয়। আপনি লজিক টুকরা পয়েন্টারটিকে কোনও গেম ক্লাসে পাস করতে পারেন যা টুকরো চলন্ত পরিচালনা করতে পারে। একমাত্র ত্রুটি হ'ল ইনস্ট্যান্টেশনটি কোনও ইউআই ক্লাসে ঘটতে পারে।


ঠিক আছে, তাই আমি কিছু আছে বলা যাক Piece* p। আমি কীভাবে জানতে পারি যে PawnViewএটি প্রদর্শন করতে আমাকে একটি তৈরি করতে হবে, এবং না RookViewবা KingView? বা আমি যখনই নতুন পিস তৈরি করব তখনই কি আমাকে তত্ক্ষণাত সহিত দৃশ্য বা উপস্থাপক তৈরি করতে হবে? এটি মূলত নির্ভর করবে উল্টানো নির্ভরতাগুলির সাথে @ ক্যান্ডিডআরঞ্জের সমাধান। সেক্ষেত্রে, PawnViewকনস্ট্রাক্টর একটিও নিতে পারে Pawn*, কেবল একটি নয় Piece*
আমন

হ্যাঁ আমি দুঃখিত, প্যাভভিউ কনস্ট্রাক্টর একটি পাওন * নেবেন। এবং অগত্যা আপনাকে একই সাথে একটি প্যাভভিউ এবং একটি জীবাশ্ম তৈরি করতে হবে না। মনে করুন যে এমন একটি গেম রয়েছে যা 100 পাউন্ডের থাকতে পারে তবে একসাথে কেবল 10 টি দৃশ্যমান হতে পারে, এক্ষেত্রে আপনি একাধিক পাউন্ডের জন্য পনভিউগুলি পুনরায় ব্যবহার করতে পারেন।
লাসে জ্যাকবস

এবং আমি @ ক্যান্ডিডআরঞ্জের সমাধানের সাথে একমত হয়েছি যদিও আমি আমার 2 সেন্ট ভাগ করে নেব।
লাসে জ্যাকবস

0

আমি Pieceজেনেরিক তৈরি করে এটির নিকট পৌঁছে যাব , যেখানে এর প্যারামিটারটি একটি গণনার ধরন যা টুকরার ধরণকে চিহ্নিত করে, প্রতিটি টুকরো যেমন একটি জাতীয় ধরণের একটি উল্লেখ রয়েছে। তারপরে ইউআই পূর্বের হিসাবে গণনা থেকে একটি মানচিত্র ব্যবহার করতে পারে:

public abstract class Piece<T>
{
    T type;
    public Piece (T type) { this.type = type; }
    public T getType() { return type; }
}
enum ChessPieceType { PAWN, ... }
public class Pawn extends Piece<ChessPieceType>
{
    public Pawn () { super (ChessPieceType.PAWN); }

এর দুটি আকর্ষণীয় সুবিধা রয়েছে:

প্রথমে, বেশিরভাগ স্থিতিযুক্ত টাইপ করা ভাষার ক্ষেত্রে প্রযোজ্য: আপনি যদি এক্স বোর্ডে টুকরো টুকরো টাইপ করে আপনার বোর্ডকে প্যারামিটার করেন তবে আপনি এর মধ্যে ভুল প্রকারের টুকরোটি sertোকাতে পারবেন না।

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

 public class ChessPiece extends Piece<ChessPieceType> {
    ....
   boolean isMoveValid (Move move)
    {
         return getType().movePatterns().contains (move.asVector()) && ....


 public enum ChessPieceType {
    public abstract Set<Vector2D> movePatterns();
    PAWN {
         public Set<Vector2D> movePatterns () {
              return Util.makeSet(
                    new Vector2D(0, 1),
                    ....

(স্পষ্টত বাস্তব বাস্তবায়নগুলি এর চেয়ে আরও জটিল হওয়া দরকার তবে আশা করি আপনি ধারণাটি পাবেন)


0

আমি বাস্তববাদী প্রোগ্রামার এবং আমি পরিষ্কার বা নোংরা আর্কিটেকচার কী তা সত্যিই যত্ন করি না। আমি প্রয়োজনীয়তা বিশ্বাস করি এবং এটি সহজ উপায়ে পরিচালনা করা উচিত।

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

public class Program
{
    public static void Main(string[] args)
    {
        new Rook(new Presenter { Image = "rook.png", Color = "blue" });
    }
}

public abstract class Piece
{
    public Presenter Presenter { get; private set; }
    public Piece(Presenter presenter)
    {
        this.Presenter = presenter;
    }
}

public class Pawn : Piece
{
    public Pawn(Presenter presenter) : base(presenter) { }
}

public class Rook : Piece
{
    public Rook(Presenter presenter) : base(presenter) { }
}

public class Presenter
{
    public string Image { get; set; }
    public string Color { get; set; }
}

আপনি যেমনটি দেখেছেন উপস্থাপক পরামিতি প্রতিটি ডিভাইসে (উপস্থাপনা স্তর) আলাদাভাবে পাস করা উচিত। তার মানে আপনার উপস্থাপনা স্তরটি প্রতিটি টুকরোকে কীভাবে উপস্থাপন করবেন তা সিদ্ধান্ত নেবে। এই সমাধানে ভুল কী?


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

আপনি উপস্থাপককে optionচ্ছিক প্যারামিটার হিসাবেও সংজ্ঞায়িত করতে পারেন।
ফ্রেশব্লুড

0

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

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

আপনি জিজ্ঞাসা করছেন যে আমি যদি একটি নতুন টুকরা যোগ করি? দাবা একটি নতুন টুকরো প্রবর্তন করবে এটি বাস্তববাদী নয়। এটি আপনার ডোমেনে বিশাল পরিবর্তন হবে। সুতরাং YAGNI নীতি অনুসরণ করুন।


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