VegetableManager ( -) , , ? VegetableManager .
, (.. ). , . , , , . , , . , - . , - , -, .
codebehind :
protected void Page_Load(object sender, EventArgs e) {
var veggieManager = new VegetableManager();
VeggieListControl.DataSource = veggieManager.GetAll();
VeggieListControl.DataBind();
}
VegetableManager.cs:
public class VegetableManager {
private static Collection<Vegetable> _veggies;
private static object _veggieLock;
public ReadOnlyCollection<Vegetable> GetAll() {
if (_veggies == null) {
lock(_veggieLock) {
if (_veggies == null) {
}
}
}
return new ReadOnlyCollection(_veggies);
}
public void Add(Vegetable veggie) {
GetAll();
lock(_veggieLock) {
_veggies.Add(veggie);
}
}
}
_veggies - static, veggies, , VegetableManager. , (, -), (, lock s).
. UncleBob SOLID , ( ).
, , - , , , , . DRY "" , ; . , , , , VegetableManager, , OOO: -)
public abstract class FoodUserControl : UserControl {
protected List<Vegetable> GetVeggies() {
return new VegetableManager().GetAll();
}
}
, UserControl.
Eager-loading VegetableManager.cs:
public class VegetableManager {
private static Collection<Vegetable> _veggies;
private static object _veggieLock;
static VegetableManager() {
}
public ReadOnlyCollection<Vegetable> GetAll() {
return new ReadOnlyCollection(_veggies);
}
public void Add(Vegetable veggie) {
lock(_veggieLock) {
_veggies.Add(veggie);
}
}
}
, - . , static, static ( static). veggies , GetAll Add.