swirl
Home Software Blog Wallpapers Webtools
Treat your collections well
Sunday 08, March 2015   |   Post link

Let's say we want to implement a method which will save a 'person' object to a file. The function would most probably look like this:

void Save(Person p)
{
}

Fair enough. Let's say a time comes when there is a need to save multiple person objects, how should the method look like now? How about this?

void Save (Person[] persons) 
{
    foreach (Person p in persons)
    {
         // save each person..
         Save (p);
    }
}

I have seen most projects use this approach which usually ends up changing to:

void Save(List<Person> persons)
{
    foreach (Person p in persons)
    {
         // save each person..
         Save (p);
    }
}

Why? Because the consumer of the Save method decided to store the person objects in a List. With methods such as ToList() and ToArray(), we don't really have to provide overloads of the Save method to cater to lists and arrays, the caller can just use ToList() on an array when calling the Save(List) method.

Of course there is a better way. As far as the Save() method is concerned, it's doing something bad i.e. assuming the collection of persons to be of a particular type, 'List' in this case. It doesn't have to be this way. If we use something like 'IEnumerable' most collections of person objects would get served by the Save method. If all you need to do it iterate over each element of the collection as in this case, IEnumerable is fine.

void Save (IEnumerable<Person> persons) 
{
    foreach (Person p in persons)
    {
         // save each person..
         Save (p);
    }
}

Treat your collections well and you won't have to change them.



Categories: Book review (3)

Comments

Posts By Year

2017 (10)
2016 (6)
2015 (18)
2014 (2)
2013 (4)
2012 (2)

Posts By Category

ASP.NET MVC (4)
Android (1)
Book review (3)
Business (1)
C# (2)
Containers (3)
Corporate culture (1)
Database migration (1)
Desktop (1)
DotNet (1)
Entity Framework (2)
Git (2)
IIS (1)
Java (2)
Life (6)
Lucene (1)
OData (1)
Office (1)
PHP (1)
PowerShell (1)
Programming (15)
Rants (5)
Software Engineering (1)
Software development (1)
Solr (1)
Sql Server (1)
T-SQL (1)
TDD (1)
TSQL (5)
Tablet (1)
Technology (1)
Test Driven (1)
Unit Testing (1)
Utilities (1)
Wallpapers (1)
Windows (5)
XML (1)

Posts By Tags

ASP.NET(4) Adults(1) Advertising(1) Android(1) Anti-forgery(1) Backup(1) Beliefs(1) Book review(2) Books(1) Busy(1) C#(3) C++(1) CSRF(1) CTE(1) Checkbox(1) Cmdlet(1) Commons(1) Company culture(1) Consumerism(1) Containers(3) Data-time(1) Database(1) Debugging(1) Developer(2) Dockers(2) Entity framework(1) File copy(1) File history(1) Git(1) GradleApache(1) HierarchyID(1) IIS(1) Installing(1) Intelli J(1) JSON(1) JavaScript(1) Localization(1) Log4J(1) Lucene(1) MVC(4) Management(2) Migration history(1) Mobile Apps(1) Modern Life(1) Money(1) OData(1) Objects(1) Office(1) Organization(1) PHP(1) Paths(1) PowerShell(1) Programming(1) Python(1) Quality(1) SD card(1) SQL(1) SQL Code-first Migration(1) SSH(1) Sattelite assemblies(1) School(1) Self reliance(1) Solr(1) Sony VAIO(1) Spirituality(1) Sql Express(1) System Image(1) TDD(1) TSQL(3) Tablet(1) Url rewrite(1) Validation(2) Wallpapers(1) Web Development(4) Windows(1) Windows 10(1) Windows 2016(2) Windows 8.1(1) Work culture(1) XML(1) Yii(1)