webForumDet fria alternativet

ReadOnlyCollection<Order> eller List<Order>?

.NET

2 svar · 414 visningar · startad av Lukaspojken

Medlem sedan maj 20011 312 inlägg
Frågan#1

Nedan är två alternativ på hur ett kundobjekt kan se ut. Vilket av alternativen föredrar du och varför?

Alternativ 1

public class Customer
{
        private List<Order> _orders = new List<Order>();

        ...

        public ReadOnlyCollection<Order> Orders 
        { 
	get { return _orders.AsReadOnly(); } 
        }

        public AddOrder(Order order)
        {
	_orders.Add(order);
        }
}

I alternativ 1 kan enbart en ny order läggas till via metoden AddOrder.

Alternativ 2

public class Customer
{
        private List<Order> _orders = new List<Order>();

        ...

        public List<Order> Orders
        {
        	get { return orders; }
	set { orders = value; }
        }
}

I alternativ 2 så kan man lägga till en ny order via följande kodrad:
customer.Orders.Add(order)

Vilket alternativ är att föredra enligt dig och varför?

Medlem sedan jan. 20023 327 inlägg
#2

Det var nyligen en tråd aktiv, där exponering av listor diskuterades:
http://www.webforum.nu/showthread.php?t=170843

Medlem sedan maj 20011 312 inlägg
#3

Tack för länken! Den diskussionen hade jag missat helt...

Den artikel som nämns i diskussion är bra:
http://dotnetslackers.com/articles/net/List-and-Object-oriented-Design-Principles.aspx

Nedanstående text i artikeln sammanfattar det ganska bra:
"... Cwalina recommends that you avoid List<T> in public APIs. What is the alternative? You should use a simpler list-based type such as Collection<T> or ReadOnlyCollection<T> for outputs and class properties. You should go for IEnumerable<T>, ICollection<T>, IList<T> for input parameters.

When you return an object from a method, you should return the simplest possible object that works in the scenario."

305 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
176 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
176 ms — ändringar (db)