ফোল্ডার বাই টাইপ বা ফোল্ডার বাই বৈশিষ্ট্য


59

আমি একটি কৌনিক জেএস স্টাইল গাইড ব্যবহার করি। এই গাইডের folder-by-featureপরিবর্তে একটি স্টাইল বলা হয় , তার পরিবর্তে folder-by-typeএবং আমি সর্বোত্তম পদ্ধতির কী জাগ্রত তা জানতে পেরেছি (জাভার এই উদাহরণে)

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

ফোল্ডারে বাই স্টাইলগুলি গ্রহণ করে আমাদের প্যাকেজিং কাঠামোর জন্য দুটি বিকল্প রয়েছে:

1. ফোল্ডার বাই টাইপ

com.example
├── domain
│    ├── User.java
│    └── Pet.java
├── controllers
│    ├── UserController.java
│    └── PetController.java
├── repositories
│    ├── UserRepository.java
│    └── PetRepository.java
├── services
│    ├── UserService.java
│    └── PetService.java
│   // and everything else in the project
└── MyApplication.java

2. ফোল্ডার বাই বৈশিষ্ট্য

com.example
├── pet
│    ├── Pet.java
│    ├── PetController.java
│    ├── PetRepository.java
│    └── PetService.java
├── user
│    ├── User.java
│    ├── UserController.java
│    ├── UserRepository.java
│    └── UserService.java
│   // and everything else in the project
└── MyApplication.java

একটি ভাল পদ্ধতির কী হবে, এবং এটি করার পক্ষে যুক্তিগুলি কী কী?



1
আমি @ লাইভকে চিনি না। ভাষা / কাঠামোটি কি সত্যই উত্তরটিকে প্রভাবিত করে? নির্বিশেষে, অন্য প্রশ্ন অবশ্যই প্রাসঙ্গিক।
রাবারডাক

1
তারপরে আমাকে আমার উত্তরটি সম্পাদনা করতে হবে। এবং ইয়েস্ট, এটি একটি সম্ভাব্য সদৃশ
লাইভ

2
আমি কখনই ফোল্ডার-বাই-টাইপের সুবিধা বুঝতে পারি নি। আমি যদি পোষা প্রাণীর বৈশিষ্ট্য সম্পর্কিত কোনও টিকিটে কাজ করি তবে আমি সম্ভবত স্থানীয়তা Pet, নিয়ামক, সংগ্রহশালা এবং পরিষেবা থেকে উপকৃত হব । কোন পরিস্থিতিতে আমার সব কন্ট্রোলারের প্রয়োজন হবে, তবে ভিউ, রেপো বা পরিষেবাদিবিহীন?
আলেকজান্ডার

2
কেউ জাভাতে প্যাকেজগুলি কেবল ফোল্ডার নয় বলে উল্লেখ করেছে বলে মনে হয় না; তারা অন্তর্ভুক্ত শ্রেণীর জন্য অ্যাক্সেস প্রভাবিত করে। এই কারণে, প্যাকেজ-বাই-লেয়ার / টাইপ জাভাতে কিছু অর্থপূর্ণ মান প্রদান করতে পারে।
অ্যাঙ্গাস গোল্ডস্মিত

উত্তর:


69

ফোল্ডার বাই টাইপ কেবলমাত্র ছোট স্কেল প্রকল্পগুলিতে কাজ করে। সর্বাধিক ক্ষেত্রে ফোল্ডার বাই বৈশিষ্ট্যটি সেরা superior

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

অতএব, ফোল্ডার-বাই-বৈশিষ্ট্যটি এর স্কেলেযোগ্যতার কারণে আরও ভাল better তবে আপনি যদি বৈশিষ্ট্য অনুসারে ফোল্ডার করেন তবে কোনও ফাইল প্রতিনিধিত্ব করে এমন উপাদানগুলির ধরণ সম্পর্কে তথ্য হারাতে হবে (কারণ এটি কোনও controllerফোল্ডারে আর বলতে দেয় না), তাই এটিও বিভ্রান্তিকর হয়ে ওঠে। এর জন্য 2 টি সহজ সমাধান রয়েছে।

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

নামকরণের নির্দেশিকা

  • উপাদানটির বৈশিষ্ট্যটি তারপরে (allyচ্ছিকভাবে) বর্ণনা করে এমন একটি প্যাটার্ন অনুসরণ করে সমস্ত উপাদানগুলির জন্য ধারাবাহিক নাম ব্যবহার করুন। আমার
    প্রস্তাবিত প্যাটার্নটি বৈশিষ্ট্য.টিপ.জেএসএস। বেশিরভাগ
    সম্পদের জন্য 2 টি নাম রয়েছে :

    • ফাইলের নাম (avengers.controller.js)
    • কৌণিকের সাথে নিবন্ধিত উপাদানটির নাম (অ্যাভেঞ্জারস কনট্রোলার)

দ্বিতীয়ত, আপনি ফোল্ডার-দ্বারা-টাইপ এবং ফোল্ডার-দ্বারা-বৈশিষ্ট্য শৈলীগুলি ফোল্ডার-বাই-বৈশিষ্ট্য অনুসারে বৈশিষ্ট্যগুলিতে একত্রিত করতে পারেন:

com.example
├── pet
|   ├── Controllers
│   |   ├── PetController1.java
|   |   └── PetController2.java
|   └── Services
│       ├── PetService1.java
│       └── PetService2.java
├── user
|   ├── Controllers
│   |   ├── UserController1.java
│   |   └── UserController2.java
|   └── Services
│       ├── UserService1.java
│       └── UserService2.java

1
Johnpapa শৈলী গাইড ঠিক আমি :-) সম্পর্কে fakking ছিল
Jelle

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

1
@ লাইভ উদাহরণটিতে আমি এটির ওভারকিলকে সম্মত করে দিয়েছি, তবে আমার বেশিরভাগ আসল ব্যবসায়ের ক্ষেত্রে যেখানে প্রতিটি টাইপ-ফোল্ডারে সহজেই 10-20 ফাইল থাকতে পারে আমার মনে হয় এটি খুব দরকারী কারণ সামগ্রিক বৈশিষ্ট্য-ফোল্ডারটি 50 এর অর্ডারে থাকবে অন্যথায় ফাইল।
মনিকা

6
ফ্যাকিং, ধন্যবাদ আইফোন স্বয়ং-সঠিক! আমার অর্থ 'কথা বলা'।
জেলি

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

26

কনভেনশন-ওভার-কনফিগারেশন পদ্ধতির অংশ হিসাবে আপনাকে এমন একটি ফ্রেমওয়ার্ক ব্যবহার না করে যা ফোল্ডার-বাই-টাইপকে বাধ্য করে unless

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


10
আমি যুক্ত করব যে ফোল্ডারে বাই বৈশিষ্ট্য ক্লাস এবং পদ্ধতি স্কোপস (সুরক্ষিত, প্যাকেজ, ...) এর সাথে খেলতে সহজ করে তোলে।
লাইভ

ছোট প্রকল্পগুলির জন্য আপনার কাছে কেবল একটি বৈশিষ্ট্য থাকতে পারে। সেই দৃশ্যে টাইপ করে সংগঠিত করা অনেক সহজ।
aaaaaa

উদাহরণস্বরূপ, গ্রেইস আপনার ডোমেন, নিয়ন্ত্রক, পরিষেবা ইত্যাদির জন্য ফোল্ডার-বাই-টাইপ জোর করে
টায়ারওয়াল

17

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

অন্যান্য কারণগুলি হ'ল:

  • আরও সহজ কোড নেভিগেশন
  • বিমূর্ততার একটি উচ্চতর স্তর
  • স্কোপগুলি ছোট করুন (সীমাবদ্ধ প্রসঙ্গগুলি)
  • উল্লম্ব মডুলারাইজেশন

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

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

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