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)

Load Comments

Posts By Year

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

Posts By Category

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

Posts By Tags

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