Created
March 28, 2018 12:53
-
-
Save ulve/c4d7dc7a7caf73623129ff8867b7b2fe to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public enum Målstatus | |
{ | |
Nytt, | |
Diariefört, | |
Gallrat, | |
Avlutat | |
} | |
public interface IMål | |
{ | |
Målstatus Status { get; } | |
} | |
public interface INyttMål : IMål, IKanDiarieföras, IKanTasBort, IKanMinnesanteckna | |
{ | |
} | |
public interface IDiarieförtMål : IMål, IKanGallras, IKanMinnesanteckna, IKanTjänsteanteckna, IKanAvslutas | |
{ | |
} | |
public interface IGallratMål : IMål | |
{ | |
} | |
public interface IAvslutatMål : IMål, IHarTjänsteanteckningar | |
{ | |
} | |
public interface IHarMinnesanteckningar | |
{ | |
List<string> Minnesanteckningar { get; } | |
} | |
public interface IHarTjänsteanteckningar | |
{ | |
List<string> Tjänsteanteckningar { get; } | |
} | |
public interface IKanTjänsteanteckna : IHarTjänsteanteckningar | |
{ | |
void SkrivTjänsteanteckning(string tjänsteanteckning); | |
} | |
public interface IKanMinnesanteckna : IHarMinnesanteckningar | |
{ | |
void SkrivMinnesanteckning(string tjänsteanteckning); | |
} | |
public interface IKanDiarieföras | |
{ | |
IDiarieförtMål Diarieför(string diarienummer); | |
} | |
public interface IKanTasBort | |
{ | |
void TaBort(); | |
} | |
public interface IKanAvslutas | |
{ | |
IAvslutatMål Avsluta(); | |
} | |
public interface IKanGallras | |
{ | |
IGallratMål Gallra(); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
static void Main(string[] args) | |
{ | |
// Skriv en tjänsteanteckning | |
var hämtat = MålRepo.HämtaFrånDatabas(Målstatus.Diariefört); | |
if(hämtat is IKanTjänsteanteckna) | |
{ | |
((IKanTjänsteanteckna)hämtat).SkrivTjänsteanteckning("Skriv en tjänsteanteckning"); | |
} | |
Console.WriteLine(hämtat); | |
// Skapa ett nytt mål och diarieför det sen asvsluta | |
var mål = MålRepo.SkapaNyttMål(); | |
mål.SkrivMinnesanteckning("Målet mottagit av mottagningstjänsten"); | |
var diariefört = mål.Diarieför(Guid.NewGuid().ToString().Substring(0, 8)); | |
diariefört.SkrivTjänsteanteckning("Diarieföring gjord av handläggare"); | |
var avslutat = diariefört.Avsluta(); | |
Console.WriteLine(avslutat); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class MålRepo | |
{ | |
public static INyttMål SkapaNyttMål() | |
{ | |
return new NyttMål(); | |
} | |
public static IMål HämtaFrånDatabas(Målstatus id) | |
{ | |
switch(id) | |
{ | |
case Målstatus.Diariefört: | |
return new DiarieförtMål(new NyttMål(), Guid.NewGuid().ToString().Substring(0, 8)); | |
case Målstatus.Avlutat: | |
var mål = new NyttMål(); | |
var diariefört = mål.Diarieför(Guid.NewGuid().ToString().Substring(0, 8)); | |
var avslutat = diariefört.Avsluta(); | |
return avslutat; | |
case Målstatus.Gallrat: | |
var mål2 = new NyttMål(); | |
var diariefört2 = mål2.Diarieför(Guid.NewGuid().ToString().Substring(0, 8)); | |
var gallrat2 = diariefört2.Gallra(); | |
return gallrat2; | |
default: | |
return new NyttMål(); | |
} | |
} | |
abstract class Mål | |
{ | |
public Målstatus Status { get; protected set; } | |
} | |
class NyttMål : Mål, INyttMål | |
{ | |
public List<string> Minnesanteckningar { get; private set; } | |
public NyttMål() | |
{ | |
Minnesanteckningar = new List<string>(); | |
Status = Målstatus.Nytt; | |
} | |
public IDiarieförtMål Diarieför(string diarienummer) | |
{ | |
Console.WriteLine($"Diarieför målet med diarienummer {diarienummer}"); | |
return new DiarieförtMål(this, diarienummer); | |
} | |
public void TaBort() | |
{ | |
Console.WriteLine("Tar bort målet"); | |
} | |
public void SkrivMinnesanteckning(string minnesanteckning) | |
{ | |
Console.WriteLine($"Lägger till minnesanteckning {minnesanteckning}"); | |
Minnesanteckningar.Add(minnesanteckning); | |
} | |
public override string ToString() | |
{ | |
var s = "-------------------------------------\nStatus: Nytt\n"; | |
foreach (var m in Minnesanteckningar) | |
{ | |
s += $"Minnesanteckning: {m}\n"; | |
} | |
return s + "-------------------------------------\n"; | |
} | |
} | |
class DiarieförtMål : Mål, IDiarieförtMål | |
{ | |
public List<string> Minnesanteckningar { get; private set; } | |
public List<string> Tjänsteanteckningar { get; protected set; } | |
public string Diarienummer { get; private set; } | |
public string Målnummer { get; private set; } | |
public DiarieförtMål(NyttMål mål, string diarienummer) | |
{ | |
Diarienummer = diarienummer; | |
Målnummer = Guid.NewGuid().ToString().Substring(0, 8); | |
Minnesanteckningar = mål.Minnesanteckningar; | |
Tjänsteanteckningar = new List<string>(); | |
Status = Målstatus.Diariefört; | |
} | |
public void SkrivMinnesanteckning(string minnesanteckning) | |
{ | |
Console.WriteLine($"Lägger till minnesanteckning {minnesanteckning}"); | |
Minnesanteckningar.Add(minnesanteckning); | |
} | |
public void SkrivTjänsteanteckning(string tjänsteanteckning) | |
{ | |
Console.WriteLine($"Lägger till tjänsteanteckning {tjänsteanteckning}"); | |
Tjänsteanteckningar.Add(tjänsteanteckning); | |
} | |
public IAvslutatMål Avsluta() | |
{ | |
Console.WriteLine("Avslutar målet"); | |
return new AvslutatMål(this); | |
} | |
public override string ToString() | |
{ | |
var s = "-------------------------------------\nStatus: Diarierfört\n"; | |
s += $"Målnummer: {Målnummer}\n"; | |
s += $"Diarienummer: {Diarienummer}\n"; | |
foreach (var m in Minnesanteckningar) | |
{ | |
s += $"Minnesanteckning: {m}\n"; | |
} | |
foreach (var m in Tjänsteanteckningar) | |
{ | |
s += $"Tjänsteanteckning: {m}\n"; | |
} | |
return s + "-------------------------------------\n"; | |
} | |
public IGallratMål Gallra() | |
{ | |
Console.WriteLine("Gallrar målet"); | |
return new GallratMål(this); | |
} | |
} | |
class GallratMål : Mål, IGallratMål | |
{ | |
public string Målnummer { get; private set; } | |
public string Diarienummer { get; private set; } | |
public GallratMål(AvslutatMål mål) | |
{ | |
Målnummer = mål.Målnummer; | |
Diarienummer = mål.Diarienummer; | |
Status = Målstatus.Gallrat; | |
} | |
public GallratMål(DiarieförtMål mål) | |
{ | |
Målnummer = mål.Målnummer; | |
Diarienummer = mål.Diarienummer; | |
Status = Målstatus.Gallrat; | |
} | |
public override string ToString() | |
{ | |
var s = "-------------------------------------\nStatus: Gallrat\n"; | |
s += $"Målnummer: {Målnummer}\n"; | |
s += $"Diarienummer: {Diarienummer}\n"; | |
return s + "-------------------------------------\n"; | |
} | |
} | |
class AvslutatMål : Mål, IAvslutatMål | |
{ | |
public List<string> Tjänsteanteckningar { get; protected set; } | |
public string Målnummer { get; private set; } | |
public string Diarienummer { get; private set; } | |
public AvslutatMål(DiarieförtMål mål) | |
{ | |
Diarienummer = mål.Diarienummer; | |
Målnummer = mål.Målnummer; | |
Tjänsteanteckningar = mål.Tjänsteanteckningar; | |
Status = Målstatus.Avlutat; | |
} | |
public GallratMål Gallra() | |
{ | |
Console.WriteLine("Gallrar mål"); | |
return new GallratMål(this); | |
} | |
public override string ToString() | |
{ | |
var s = "-------------------------------------\nStatus: Avslutat\n"; | |
s += $"Målnummer: {Målnummer}\n"; | |
s += $"Diarienummer: {Diarienummer}\n"; | |
foreach (var m in Tjänsteanteckningar) | |
{ | |
s += $"Tjänsteanteckning: {m}\n"; | |
} | |
return s + "-------------------------------------\n"; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment