আমি ইদানীং সলাইড সম্পর্কে ক্লিন কোড এবং বিভিন্ন অনলাইন নিবন্ধগুলি পড়ছি এবং এটি সম্পর্কে যত বেশি পড়ি ততই আমার মনে হয় আমি কিছুই জানি না।
ধরা যাক আমি এএসপি.নেট এমভিসি 3 ব্যবহার করে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করছি Let's বলুন যে আমার কাছে এর মতো UsersController
একটি Create
ক্রিয়া রয়েছে:
public class UsersController : Controller
{
public ActionResult Create(CreateUserViewModel viewModel)
{
}
}
সেই অ্যাকশন পদ্ধতিতে আমি কোনও ব্যবহারকারীকে ডাটাবেজে সংরক্ষণ করতে চাই যদি প্রবেশ করা ডেটা বৈধ হয়।
এখন, একক দায়িত্বের নীতিমালা অনুসারে কোনও জিনিসের একক দায়িত্ব থাকা উচিত এবং সেই দায়িত্ব পুরোপুরি শ্রেণীর দ্বারা আবশ্যক। এর সমস্ত পরিষেবা সংকীর্ণভাবে সেই দায়িত্বের সাথে সামঞ্জস্য করা উচিত। যেহেতু ডাটাবেসটিতে বৈধতা এবং সংরক্ষণ দুটি পৃথক দায়িত্ব, তাই আমি মনে করি এগুলি পরিচালনা করার জন্য আমার পৃথক শ্রেণি তৈরি করা উচিত:
public class UsersController : Controller
{
private ICreateUserValidator validator;
private IUserService service;
public UsersController(ICreateUserValidator validator, IUserService service)
{
this.validator = validator;
this.service= service;
}
public ActionResult Create(CreateUserViewModel viewModel)
{
ValidationResult result = validator.IsValid(viewModel);
if (result.IsValid)
{
service.CreateUser(viewModel);
return RedirectToAction("Index");
}
else
{
foreach (var errorMessage in result.ErrorMessages)
{
ModelState.AddModelError(String.Empty, errorMessage);
}
return View(viewModel);
}
}
}
এটি আমার কাছে কিছুটা অর্থবোধ করে, তবে আমি এগুলি নিশ্চিতভাবেই নিশ্চিত নই যে এই জাতীয় জিনিসগুলি হ্যান্ডেল করার এটিই সঠিক উপায়। এটা উদাহরণস্বরূপ একটি অবৈধ উদাহরণস্বরূপ পাস সম্পূর্ণরূপে সম্ভব CreateUserViewModel
করতে IUserService
বর্গ। আমি জানি আমি ডেটাঅ্যানোটেশনগুলিতে অন্তর্নির্মিতটি ব্যবহার করতে পারি, কিন্তু যখন তারা যথেষ্ট না হয় তখন কী হবে? ICreateUserValidator
ইতিমধ্যে একই নামের সাথে আরও একজন ব্যবহারকারী রয়েছেন কিনা তা দেখতে আমার ডাটাবেসটি পরীক্ষা করে দেখুন এমন চিত্র ...
অন্য বিকল্পটি হ'ল IUserService
বৈধতাটির যত্ন নেওয়ার জন্য এটি করা:
public class UserService : IUserService
{
private ICreateUserValidator validator;
public UserService(ICreateUserValidator validator)
{
this.validator = validator;
}
public ValidationResult CreateUser(CreateUserViewModel viewModel)
{
var result = validator.IsValid(viewModel);
if (result.IsValid)
{
// Save the user
}
return result;
}
}
তবে আমি অনুভব করছি যে আমি এখানে একক দায়িত্বের নীতি লঙ্ঘন করছি।
এই জাতীয় কিছু নিয়ে আমার কীভাবে আচরণ করা উচিত?
user
শ্রেণিটি কি বৈধতা পরিচালনা করতে হবে না ? এসআরপি বা না, আমি কেন দেখতে পাচ্ছি না কেনuser
উদাহরণটি যখন এটি কার্যকর হয় বা না হয় এবং এটির জন্য এটি নির্ধারণ করতে অন্য কোনও কিছুর উপর নির্ভর করা হয়। ক্লাসের অন্যান্য কী দায়িত্ব রয়েছে? প্লাস যখনuser
বৈধতা পরিবর্তন হয় সম্ভবত পরিবর্তন হবে, তাই আউটসোর্সিং যে একটি অন্য শ্রেণিতে শুধুমাত্র একটি শক্তভাবে দম্পতি বর্গ তৈরি করা হবে।