Loodetavasti on kõht nüüd brokkoli parajasti täis ja kood ilustatud laiendusmeetoditega, mida käsitlesin eelmise artiklis. Teiseks lihtsaks võtteks on tagastada kogu objekt meetoditel. See ei ole midagi keerulisemat kui kirjutada kaks sõna:
return this;
Võib kerkida küsimus, et kus neid kasutada, kui on klassides defineeritud ainult atribuudid (property) ja paar üksikut meetodit. Nii ei ole võimalik seda väga lihtsalt rakendada.
public class Product
{
public StockKeepingUnit SKU { get; set; }
public ProductName Name { get; set; }
public Money Price { get; set; }
public Party Vendor { get; set; }
}
var product = new Product
{
SKU = new StockKeepingUnit(“PRO-2345”),
ProductName = new ProductName(“Goldstein Elite Blue Pen”),
Price = new Money(10m, Currency.EEK),
Vendor = new Organization(“ABC Company”)
};
Defineerides paar meetodit võiksime selle klassi saada järgmiseks:
public class Product
{
public StockKeepingUnit SKU { get; protected set; }
public ProductName Name { get; protected set; }
public Money Price { get; protected set; }
public Party Vendor { get; protected set; }
public Product Named(string name)
{
Name = new ProductName(name);
return this;
}
public Product SerializedAs(string serial)
{
SKU = new StockKeepingUnit(serial);
return this;
}
public Product Priced(decimal amount, Currency currency)
{
Price = new Money(amount, currency);
return this;
}
public Product ProducedBy(string name)
{
Vendor = new Organization(name);
return this;
}
}
var product = new Product()
.Named(“Goldstein Elite Blue Pen”)
.SerializedAs(“PRO-2345”)
.Priced(10m, Currency.EEK)
.ProducedBy(“ABC Company”);
Ilmselt panite tähele, et uues koodis on rohkem koodi. Samas see tundub loetavam ja peamiselt tegeleme primitiivtüüpidega.
Esmapilgul võib tunduda, et Object-Relational Mappertite (ORM) osas võib tekkida probleeme, kuid NHibernate tingimused tunduvad täidetud olevat (protected setterid on olemas). Seevastu teisendamine objektist objektiks võib veidi probleemsem olla. Olemist (entity) transpordiobjektist (Data Transfer Object, DTO) ei tohiks probleemne olla, kuid vastupidine on juba keerulisem. Mulle tundub, et see ongi hea – see sunnib meid mõtlema veidi teisiti, muudatused olemis peaksid olema ärilise üksusena, mitte nagu tänapäeva tabelipõhised haldamised.
Liideste abiga on meil veel võimalik kitsendada valikuid ja sundida kindla jada läbima.
public IProductNamingExpression Named(string name)
{
//...
return this;
}
public interface IProductNamingExpression
{
Product SerializedAs(string sku);
}
product.Named("Goldstein Elite Pen").SerializedAs("GEP-0001");
Kui leiate, et ei soovi enda ärimudelit nii keerukaks teha, siis on see vägagi sobilik Builder mustri jaoks, kus pika konstruktori argumentide asemele tuleb loetav jutt. See meetod sobib ka väga hästi seadistuste ja registreerimiste jaoks.
Ilusat koodi kirjutamist
Loe veel sarnastel teemadel:
- Iluvõtted koodile I, 7. aprill
- Iluvõtted koodile IV, 12. mai
- Iluvõtted koodile III, 27. aprill
- Iluvõtted testidele, 17. mai
- Ruby väärtuslikkus, 27. aprill
KAIZEN FEED
Telli endale Kaizeni uudisvoog
KOMMENTAARIDE FEED
Telli endale kommentaaride voog
KAIZEN TWITTER
Lühiuudised Kaizeni autoritelt
KAIZEN FACEBOOK
Liitu Kaizeniga
MIS ON KAIZEN?
Kaizen on Saiku tarkvaraarendusealane blogi, kus kirjutame erinevatest lähenemistest meisterlikule tarkvaraarendusele.
KATEGOORIAD
- .NET (18)
- Analüüs/Arhitektuur (11)
- Arendus (66)
- Ettevalmistus (1)
- Juhtimine (2)
- Varia (24)
SILDIPILV
- .NET (41)
- ilus kood (23)
- Arendus (23)
- C# (20)
- Analüüs/Arhitektuur (14)
- Testimine (10)
- raamat (8)
- Ruby (8)
- projektijuhtimine (8)
- printsiibid (6)
- produktiivsus (5)
- ReSharper (5)
- PHP (5)
- NHibernate (4)
- objekt-orienteeritud (4)
- pidev integratsioon (4)
- Viited (4)
- agile (4)
- Java (4)
- Geekdinner (4)
- lean (4)
- raamatukogu (4)
- CI (3)
- Cruise Control.NET (3)
- Robert C. Martin (3)
- scrum (3)
- iteratsioon (3)
- suhtlus (3)
- jQuery (2)
- TechEd 2008 (2)
- Visual Studio (2)
- valideerimine (2)
- intervjuu (2)
- tööpakkumised (1)
- analüüs (1)
- ASP.NET (1)
- ümberstruktureerimine (1)
- üritus (1)
- CodeRush (1)
- dokumentatsioon (1)
- Kent Beck (1)
- LINQ (1)
- Martin Fowler (1)
- Moq (1)
- Rhino Mocks (1)
- stackoverflow (1)
- võltsitud objektid (1)
- Whiteboard Wednesday (1)
- hindamine (1)
- tarkvara kvaliteet (1)
- ajagraafikud (1)
- Saiku (1)
- koolitus (1)
- tagasivaate (1)
- koosolek (1)
- dünaamilised keeled (1)
- staatilised keeled (1)
- FluentNHibernate (1)
- facebook (1)
- aastapäev (1)
- Rake (1)
- Oredev 2008 (1)
- toyota way (1)
- raiskamine (1)
- NDepend (1)
- podcasts (1)
- väle tarkvaraarendus (1)
- raido tonts (1)
- minimal marketable feature (1)
- kasutajalugu (1)
- twitter (1)
- Joomla! (1)
- MVC (1)
- andmebaas (1)
- versioonimine (1)
- diskussioon (1)
- regulaaravaldised (1)
- motiveerimine (1)
- mõõdikud (1)
- agileestonia (1)
- riistvara (1)
- koolitused (1)
- kujundus (1)
- kodulehed (1)
- veeb (1)
