যদিও নীচের কোডে একটি ই-বাণিজ্য সাইটের একটি সাধারণ একক আইটেম ক্রয় ব্যবহৃত হয়, আমার সাধারণ প্রশ্নটি কোনও অবজেক্টের ডেটা সর্বদা বৈধ অবস্থায় রাখতে সমস্ত ডেটা সদস্যদের আপডেট করার বিষয়ে।
এখানে প্রাসঙ্গিক বাক্যাংশ হিসাবে আমি "ধারাবাহিকতা" এবং "রাষ্ট্রই খারাপ is" দেখতে পেয়েছি, এখানে আলোচনা করা হয়েছে: https://en.wikibooks.org/wiki/Object_Oriected_Programming#.22 স্টেট ২২_আইস_ভিল .২১
<?php
class CartItem {
private $price = 0;
private $shipping = 5; // default
private $tax = 0;
private $taxPC = 5; // fixed
private $totalCost = 0;
/* private function to update all relevant data members */
private function updateAllDataMembers() {
$this->tax = $this->taxPC * 0.01 * $this->price;
$this->totalCost = $this->price + $this->shipping + $this->tax;
}
public function setPrice($price) {
$this->price = $price;
$this->updateAllDataMembers(); /* data is now in valid state */
}
public function setShipping($shipping) {
$this->shipping = $shipping;
$this->updateAllDataMembers(); /* call this in every setter */
}
public function getPrice() {
return $this->price;
}
public function getTaxAmt() {
return $this->tax;
}
public function getShipping() {
return $this->shipping;
}
public function getTotalCost() {
return $this->totalCost;
}
}
$i = new CartItem();
$i->setPrice(100);
$i->setShipping(20);
echo "Price = ".$i->getPrice().
"<br>Shipping = ".$i->getShipping().
"<br>Tax = ".$i->getTaxAmt().
"<br>Total Cost = ".$i->getTotalCost();
কোনও অসুবিধা, বা এটি করার আরও ভাল উপায়?
এটি রিয়েল রিয়েল ওয়ার্ল্ড অ্যাপ্লিকেশনগুলিতে একটি রিটার্নাল ইস্যু যা কোনও রিলেশনাল ডেটাবেস দ্বারা সমর্থিত, এবং যদি আপনি ডাটাবেসে সমস্ত বৈধতা ঠেকানোর জন্য সঞ্চিত পদ্ধতিগুলি ব্যাপকভাবে ব্যবহার না করেন। আমি মনে করি যে ডেটা স্টোরটি কেবল ডেটা সঞ্চয় করা উচিত, যখন কোডটি রান-টাইম স্টেটটি বজায় রাখার কাজটি করে।
সম্পাদনা: এটি সম্পর্কিত প্রশ্ন তবে বৈধ রাষ্ট্র বজায় রাখতে একটি বৃহত্ ফাংশন সম্পর্কিত সেরা অনুশীলনের সুপারিশ নেই: /programming/1122346/c-Sharp-object-oriented-design-maintaining- বৈধ-বস্তুর রাষ্ট্রবিরোধী
সম্পাদনা 2: যদিও @ ইগনিশিপের উত্তরটি সেরা, তবে এই উত্তরটি - /software//a/148109/208591 - যা হ'ল @ আইজেনশিপের উত্তর এবং আমি যা জানতে চেয়েছিলাম তার মধ্যে লাইনগুলি পূরণ করে - কোড কেবল প্রক্রিয়া করা উচিত, এবং বিশ্বব্যাপী রাষ্ট্রের সাথে ডিআই-সক্ষম রাষ্ট্রের অবজেক্টগুলির মধ্যে স্থান পরিবর্তন করতে হবে।