---
title: "Förenkla och förminska?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/168032-förenkla-och-förminska"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "CatZ"
published: "2008-01-11T19:37:45.000Z"
updated: "2008-01-14T11:35:16.000Z"
replies: 22
views: 812
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/168032-förenkla-och-förminska"
---

# Förenkla och förminska?

_Sida 1 av 2._

## #1 — CatZ, 2008-01-11T19:37Z

Har skapat en klass "User" som ska innehålla en massa information om användare (givetvis) men tycker att det ser tråkigt ut när jag kollar i min class. 

```
public class User
{
	#region Private Member Variables
	private int userid;
	private string username;
	private string email;
	private string password;
	private string fullname;
	private string address;
	private int mpnid;
	private int phone;
	private string signature;
	private string skype;
	private string msnmessenger;
	private int icq;
	private string yahoomessenger;
	private string lastlogindate;
	private bool adminaccess;
	private bool resultaccess;
	private bool writeaccess;
	private bool useraccess;
	private bool active;
	#endregion

	#region Constructors
	public User() { }
	public User
		(
			int userid, 
			string username, 
			string email, 
			string password, 
			string fullname, 
			string address, 
			int mpnid, 
			int phone,
			string signature, 
			string skype, 
			string msnmessenger, 
			int icq, 
			string yahoomessenger, 
			string lastlogindate, 
			bool adminaccess, 
			bool resultaccess, 
			bool writeaccess, 
			bool useraccess, 
			bool active
		)
	{
		this.userid = userid;
		this.username = username;
		this.email = email;
		this.password = password;
		this.fullname = fullname;
		this.address = address;
		this.mpnid = mpnid;
		this.phone = phone;
		this.signature = signature;
		this.skype = skype;
		this.msnmessenger = msnmessenger;
		this.icq = icq;
		this.yahoomessenger = yahoomessenger;
		this.lastlogindate = lastlogindate;
		this.adminaccess = adminaccess;
		this.resultaccess = resultaccess;
		this.writeaccess = writeaccess;
		this.useraccess = useraccess;
		this.active = active;
	}
	#endregion

	#region Public Properties
	public int UserID
	{
		get { return userid; }
		set { userid = value; }
	}
	public string UserName
	{
		get { return username; }
		set { username = value; }
	}
	public string Email
	{
		get { return email; }
		set { email = value; }
	}
	public string Password
	{
		get { return password; }
		set { password = value; }
	}
	public string FullName
	{
		get { return fullname; }
		set { fullname = value; }
	}
	public string Address
	{
		get { return address; }
		set { address = value; }
	}
	public int MpnID
	{
		get { return mpnid; }
		set { mpnid = value; }
	}
	public int Phone
	{
		get { return phone; }
		set { phone = value; }
	}
	public string Signature
	{
		get { return signature; }
		set { signature = value; }
	}
	public string Skype
	{
		get { return skype; }
		set { skype = value; }
	}
	public string MsnMessenger
	{
		get { return msnmessenger; }
		set { msnmessenger = value; }
	}
	public int ICQ
	{
		get { return icq; }
		set { icq = value; }
	}
	public string YahooMessenger
	{
		get { return yahoomessenger; }
		set { yahoomessenger = value; }
	}
	public string LastLoginDate
	{
		get { return lastlogindate; }
		set { lastlogindate = value; }
	}
	public bool AdminAccess
	{
		get { return adminaccess; }
		set { adminaccess = value; }
	}
	public bool ResultAccess
	{
		get { return resultaccess; }
		set { resultaccess = value; }
	}
	public bool WriteAccess
	{
		get { return writeaccess; }
		set { writeaccess = value; }
	}
	public bool UserAccess
	{
		get { return useraccess; }
		set { useraccess = value; }
	}
	public bool Active
	{
		get { return active; }
		set { active = value; }
	}
	#endregion
}
```

Kan jag förenkla / minska den på nåt vis? Jag har en massa idéer på hur jag skulle kunna göra men har inte vågat ändra för mycket :)

Permalänk: https://www.webforum.nu/p/168032

## #2 — CatZ, 2008-01-11T19:53Z

användarkontots rättigheter borde jag väl med fördel kunna använda mig av enum istället och ha en metod för getUserType istället och byta ut alla access mot UserType eller MemberType?

Permalänk: https://www.webforum.nu/p/2069668

## #3 — Nickemannen, 2008-01-11T20:10Z

Jag hade gjort såhär.

Du har t.ex. flera IM fält bryt ut dom mot en lista med IM objekt.
Du har flera Access bryt ut dom till ett eget objekt.

Om du hade haft fler parametrar till Adress och namn hade jag brutit ut dom också.

Permalänk: https://www.webforum.nu/p/2069674

## #4 — CatZ, 2008-01-11T20:50Z

> **Nickemannen skrev:**
>
> Jag hade gjort såhär.
> 
> Du har t.ex. flera IM fält bryt ut dom mot en lista med IM objekt.
> Du har flera Access bryt ut dom till ett eget objekt.
> 
> Om du hade haft fler parametrar till Adress och namn hade jag brutit ut dom också.

Hmm jag funderade på en lista men innebär inte det att jag måste stoppa just IM i en egen klass?

Permalänk: https://www.webforum.nu/p/2069678

## #5 — Nickemannen, 2008-01-12T00:33Z

Ne det kan visserligen vara en lista med strängar.
Borde vara det eftersom det bara är en sträng som skall sparas.

Permalänk: https://www.webforum.nu/p/2069726

## #6 — doggelito, 2008-01-12T01:43Z

Nån speciell anledning till att du har en konstruktor med alla dessa variablar?
Själv är jag lite allergisk mot sånt! :)
För samtidigt har du ju alla fält som publika egenskaper, känns som om det räcker!
Men vad vet jag, är lite full just nu! Skål! :bire
Annars är nog klassen så rolig som den kan bli! :)

Permalänk: https://www.webforum.nu/p/2069729

## #7 — freguz, 2008-01-12T02:06Z

Ja ibland känner jag att det rentav kan räcka men en liten struct istället (less is more som vi säger när vi spelar i bandet)

Permalänk: https://www.webforum.nu/p/2069734

## #8 — doggelito, 2008-01-12T12:28Z

När det gäller rättigheter så har jag lite dåliga erfarenheter när man sätter dem direkt på användaren. Ju mer man bygger ut och ju fler användare det blir så vet man till slut inte vad användarna får göra och inte får göra. Bättre då att flytta all behörighet till grupper istället och så gör du en List\<\> med användarens grupper i. :)

Permalänk: https://www.webforum.nu/p/2069780

## #9 — CatZ, 2008-01-12T13:27Z

> **doggelito skrev:**
>
> När det gäller rättigheter så har jag lite dåliga erfarenheter när man sätter dem direkt på användaren. Ju mer man bygger ut och ju fler användare det blir så vet man till slut inte vad användarna får göra och inte får göra. Bättre då att flytta all behörighet till grupper istället och så gör du en List\<\> med användarens grupper i. :)

Ja det var ungefär vad nicke förslog ;)

Permalänk: https://www.webforum.nu/p/2069795

## #10 — CatZ, 2008-01-12T15:45Z

Jag är lite vilsen om jag ska vara helt ärlig! 

```
enum IM { Skype, MsnMessenger, Icq, YahooMessenger }
```

 skulle väl gå att använda till nåt. Annars kanske en IList skulle funka men jag begriper inte hur jag skulle binda värden till min IList... 

```
		public IList IM
		{
			get { return im; }
			set { im = value; }
		}
```

 lär ju inte vara rätt metod. Man kan ju lägga till i en ILIst men hur då i det här fallet? Jag har läst för mycket om DDD och Patterns det sista och nu är jag helt vilsen i programmeringen.... allt har blivit kaos :)

Permalänk: https://www.webforum.nu/p/2069837

## #11 — doggelito, 2008-01-12T16:09Z

Varför inte skapa en im klass som du sedan fyller i din user med en List\<im\> som innehåller alla messangers som användaren har tillgång till?

Permalänk: https://www.webforum.nu/p/2069841

## #12 — CatZ, 2008-01-12T16:15Z

Jag hade tänkt det från början, sedan hörde jag att varje klass ska ha en ege fil och det känns väldigt lite för en sådan fil när det ändå bara kommer tillhöra user...

Antar att jag får lämna det bakom mig och ha dubbla klasser tillsvidare

Permalänk: https://www.webforum.nu/p/2069843

## #13 — CatZ, 2008-01-13T13:53Z

Har möblerat om lite... tror det kommer bli lite snyggare såhär. 

```
[Flags()]
public enum Permissions
{ 
	None = 0,
	Administer = 1, 
	PostResults = 2, 
	PostNews = 4,
	User = 8,
	All = Administer | PostResults | PostNews | User
}

public class User
{
	#region Private Member Variables
	private int userid;
	private string username;
	private string email;
	private string password;
	private string fullname;
	private string address;
	private int mpnid;
	private int phone;
	private string signature;
	private IList<IM> im;
	private DateTime lastlogindate;
	private Permissions _permission = Permissions.None;
	private bool active;
	#endregion

	#region Constructors
	public User() { }
	#endregion

	#region Public Properties
	public int UserID
	{
		get { return userid; }
		set { userid = value; }
	}
	public string UserName
	{
		get { return username; }
		set { username = value; }
	}
	public string Email
	{
		get { return email; }
		set { email = value; }
	}
	public string Password
	{
		get { return password; }
		set { password = value; }
	}
	public string FullName
	{
		get { return fullname; }
		set { fullname = value; }
	}
	public string Address
	{
		get { return address; }
		set { address = value; }
	}
	public int MpnID
	{
		get { return mpnid; }
		set { mpnid = value; }
	}
	public int Phone
	{
		get { return phone; }
		set { phone = value; }
	}
	public string Signature
	{
		get { return signature; }
		set { signature = value; }
	}
	public IList<IM> IM;

	public DateTime LastLoginDate
	{
		get { return lastlogindate; }
		set { lastlogindate = value; }
	}
	public Permissions Permission
	{
		get { return _permission; }
		set { _permission = value; }
	}
	public bool Active
	{
		get { return active; }
		set { active = value; }
	}
	#endregion
}

public class IM
{
	private string _skype;
	private string _msnmessenger;
	private string _yahoomessenger;
	private int _icq;

	public string Skype
	{
		get { return _skype; }
		set { _skype = value; }
	}
	public string MsnMessenger
	{
		get { return _msnmessenger; }
		set { _msnmessenger = value; }
	}
	public int ICQ
	{
		get { return _icq; }
		set { _icq = value; }
	}
	public string YahooMessenger
	{
		get { return _yahoomessenger; }
		set { _yahoomessenger = value; }
	}
}
```

Permalänk: https://www.webforum.nu/p/2070028

## #14 — freguz, 2008-01-13T14:06Z

Fiffig enum där med All, visste jag inte:-) 

Och inte vet jag vad Flags() attributet gör för något?

Permalänk: https://www.webforum.nu/p/2070031

## #15 — CatZ, 2008-01-13T14:34Z

Det är för att du ska kunna jämföra har jag för mig

Permalänk: https://www.webforum.nu/p/2070033

## #16 — Phorpher, 2008-01-13T15:22Z

> **CatZ skrev:**
>
> Det är för att du ska kunna jämföra har jag för mig

Det stämmer. Flags-attributet säger att följande enum är ett bitfält som logiska uttryck som t.ex. AND och OR ska kunna operera på.

Permalänk: https://www.webforum.nu/p/2070043

## #17 — freguz, 2008-01-13T15:33Z

Ah vad smutt, det är ju verkligen användbart!

Permalänk: https://www.webforum.nu/p/2070046

## #18 — CatZ, 2008-01-13T16:25Z

Tror att detta ska fungera om du sedan vill kolla om en användare har tillstånd

```
public bool HasPermission(Permissions _permissionToCheck)
{
	int _permission = Permissions.All;
	return ((_permissionToCheck & _permission) == _permissionToCheck);
}
```

Permalänk: https://www.webforum.nu/p/2070058

## #19 — doggelito, 2008-01-13T17:43Z

Nu vet jag inte hur din databas ser ut men rent spontant så hade jag nog inte gjort im klassen så där.
För mig hade den nog sett ut typ:

```
public class IM
{
     private int id;
     private string name;
     private string username;

     public ...
```

och sedan lagt alla mess. programmen i en egen tabell i databasen med relation till users för att på så sätt slippa hårdkodningar av programmen.
det blir enkelt då att lägga till ett mess. program då om du skulle vilja! :)

Permalänk: https://www.webforum.nu/p/2070085

## #20 — CatZ, 2008-01-13T17:51Z

Jag kommer i dagsläget inte ha någon användning av IM alls, det är ett framtida projekt och ingenting som jag bryr mig så himla mycket om men jag håller med dig om att det blir lite bättre maintainability då.

Däremot tror jag inte det kommer sådär himla många nya chatprogram som folk kommer använda sig av.

Själv har jag testat det mesta men lagt ner allt utom Live Messenger.

Permalänk: https://www.webforum.nu/p/2070086

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/168032-förenkla-och-förminska  
Nästa sida: https://www.webforum.nu/amne/dotnet/168032-förenkla-och-förminska/page2.md
