Backendontwikkeling van beheersoftware in .NET met EF Code First, Repository Pattern en Autofac

Nora
Kamoen
  1. Deze bachelorproef behandelt de ontwikkeling van een backend-applicatie voor RealDolmen Education voor het beheer van cursussen. Een belangrijk aspect hiervan is de modulaire opbouw. Ook is het noodzakelijk om de gehele ontwikkeling voldoende af te stemmen op de business kant zodat het resultaat inzake de datastructuur en functionaliteit voor hen het meest optimaal is. De volledige ontwikkeling gebeurt in .NET gebruik makend van EF Code First, Repository Pattern en Dependency Injection.

    Voor de ontwikkeling wordt vertrokken vanuit de principes van Domain Driven Design en wordt gebruik gemaakt van Entiteiten, Aggregate Roots, Repositories en Services. Binnen de entiteiten wordt een opdeling gemaakt in Aggregate Roots en losse entiteiten. De Aggregate Roots zijn ‘Course’, ‘Company’ en ‘Session’. Binnen elke entiteit zijn ook velden aanwezig die voorzien in logging en soft delete. De resulterende entiteiten worden dan omgezet naar een database gebruik makend van Entity Framework Code First. Op deze manier is het heel eenvoudig aanpassingen te maken in de datastructuur.

    De toegang tot de database wordt voorzien door Repositories. Hierbij wordt vertrokken van een generieke Repository waarvan alle andere kunnen overerven. Wanneer een andere implementatie nodig is kan deze uitgewerkt worden in de specifieke Repository. Binnen de repositories zijn methodes aanwezig voor alle CRUD-acties.

    Doorheen de volledige applicatie wordt gebruik gemaakt van Dependency Injection aan de hand van Autofac. Alle dependencies worden geregistreerd aan de hand van hun interfaces in een container. Autofac levert gebruik makend van deze container de juiste dependencies aan de juiste klassen.

    Voor de WebAPI wordt gebruik gemaakt van Owin middleware. Hierdoor kan de API draaien op eender welke server. Alle configuraties binnen de API dienen dan toegevoegd te worden aan de Owin middleware zodat de server deze zo kan consulteren.

    Binnen de controllers zijn GET, POST, DELETE en PATCH-methodes aanwezig. Deze methodes geven enkel DTO’s terug naar de client. Zo heeft de front-end enkel wat nodig is.

    De code wordt tevens uitvoerig getest gebruik makend van het XUnit framework voor .NET en Owintesting. Binnen XUnit worden testklassen geïnitialiseerd aan de hand van een constructor en afgebroken via de IDisposable interface. Er kan ook een onderscheid gemaakt worden tussen Facts en Theories. Theories kunnen variabele data meegeleverd krijgen binnen de test.

    Voor het deployment wordt gebruik gemaakt van Visual Studio Team Services en een Dacpac voor het online brengen van de database.

Bibliografie

  1. [1]  Wikipedia, „Real Software,” Wikimedia Foundation, Inc., 23 november 2014. [Online]. Available: https://nl.wikipedia.org/wiki/Real_Software. [Geopend 28 maart 2016].

  2. [2]  wdp, „Dolmen kort,” 14 augustus 2007. [Online]. Available: http://www.standaard.be/cnt/bs1g0ana. [Geopend 28 maart 2016].

  3. [3]  RealDolmen, „Over RealDolmen,” 2014. [Online]. Available: http://www.realdolmen.be/nl/about. [Geopend 9 maart 2016].

  4. [4]  RealDolmen, „Business Solutions,” 30 september 2014. [Online]. Available: http://www.realdolmen.be/nl/services-solutions/business-solutions. [Geopend 28 maart 2016].

  5. [5]  RealDolmen, „Professional Services,” 30 september 2014. [Online]. Available: http://www.realdolmen.be/nl/services-solutions/professional-services. [Geopend 28 maart 2016].

  6. [6]  RealDolmen, „Infrastructure Products,” 20 augustus 2014. [Online]. Available: http://www.realdolmen.be/nl/services-solutions/infrastructure-solutions. [Geopend 28 maart 2016].

  7. [7]  RealDolmen, „Organisatie,” 2014. [Online]. Available: http://www.realdolmen.be/nl/about/organization. [Geopend 9 maart 2016].

  8. [8]  Domain Laguage, Inc., „Domain-Driven Design,” 2016. [Online]. Available: https://domainlanguage.com/ddd/patterns/. [Geopend 23 maart 2016].

  9. [9]  Wikipedia, „Domain-Driven Design,” 11 februari 2016. [Online]. Available: https://en.wikipedia.org/wiki/Domain-driven_design. [Geopend 2 april 2016].

  10. [10]  P. Brown, „What is the difference between Entities and Value Objects,” 30 april 2014. [Online]. Available: http://culttt.com/2014/04/30/difference-entities-value-objects/. [Geopend 15 februari 2016].

  11. [11]  M. Verraes, „Related Entities vs Child Entities,” 30 december 2013. [Online]. Available: http://verraes.net/2013/12/related-entities-vs-child-entities/. [Geopend 23 februari 2016].

  12. [12]  MSDN Microsoft, „Track Data Changes (SQL Server),” 2014. [Online]. Available: https://msdn.microsoft.com/en-us/library/bb933994(v=sql.120).aspx. [Geopend 10 februari 2016].

  13. [13]  J. Galloway, „Adding simple trigger-based auditing to your SQL Server database,” 21 januari 2008. [Online]. Available: http://stackoverflow.com/questions/7268350/how-to- log-data-changed-in-sql-server-tables-which-approach-is-better. [Geopend 10 februari 2016].

  14. [14]  K. Little, „How to decide if you should use table partitioning,” 6 maart 2012. [Online]. Available: https://www.brentozar.com/archive/2012/03/how-decide-if-should-use-table- partitioning/. [Geopend 11 februari 2016].

  15. [15]  R. B. Paruchuri, „Soft Deleting Entities Cleanly Using Entity Framework 6 Interceptors,” 28 augustus 2015. [Online]. Available: http://www.codeguru.com/csharp/csharp/soft- deleting-entities-cleanly-using-entity-framework-6-interceptors.html. [Geopend 15 ferbuari 2016].

  16. [16]MSDN Microsoft, „Code First to a New Database,” 2015. [Online]. Available: https://msdn.microsoft.com/en-us/data/jj193542.aspx. [Geopend 9 februari 2016].
  17. [17]  MSDN Microsoft, „Code First Migrations,” 2015. [Online]. Available: https://msdn.microsoft.com/en-us/data/jj591621.aspx. [Geopend 10 februari 2016].
  18. [18]  MSDN Microsoft, „Loading Related Entities,” Microsoft., 2015. [Online]. Available: https://msdn.microsoft.com/en-us/data/jj574232.aspx. [Geopend 24 februari 2016].

  19. [19]  M. Durrant, „EF Code First with the Repository and Unit of Work Patterns,” 21 juni 2012. [Online]. Available: http://www.mattdurrant.com/ef-code-first-with-the-repository- and-unit-of-work-patterns/. [Geopend 17 februari 2016].

  20. [20]  MSDN Microsoft, „The Repository Pattern,” 2016. [Online]. Available: https://msdn.microsoft.com/en-us/library/ff649690.aspx. [Geopend 11 februari 2016].

  21. [21]  M. Fowler, „Data Mapper,” [Online]. Available: http://martinfowler.com/eaaCatalog/dataMapper.html. [Geopend 11 februari 2016].

  22. [22]J. Bogard, „Getting Started Guide,” 28 januari 2016. [Online]. Available: https://github.com/AutoMapper/AutoMapper/wiki/Getting-started. [Geopend 18 februari 2016].

  23. [23]  D. Nene, „A beginners guide to Dependency Injection,” 1 juli 2005. [Online]. Available: http://www.theserverside.com/news/1321158/A-beginners-guide-to-Dependen…- Injection. [Geopend 11 februari 2016].

  24. [24]  J. G. Nair, „Autofac An Open-Source Dependency Injection (DI),” 13 juli 2015. [Online]. Available: http://blog.logiticks.com/autofac-an-open-source-dependency-injection-d…. [Geopend 7 april 2016].

  25. [25]  Autofac Contributors, „Getting Started,” 2014. [Online]. Available: http://autofac.readthedocs.org/en/latest/getting-started/index.html. [Geopend 11 februari 2016].

  26. [26]  Autofac Contributors, „Modules,” 2014. [Online]. Available: http://docs.autofac.org/en/latest/configuration/modules.html. [Geopend 22 februari 2016].

  27. [27]  A. Nemes, „OWIN and Katana part 1: the basics,” 14 april 2014. [Online]. Available: http://dotnetcodr.com/2014/04/14/owin-and-katana-part-1-the-basics/. [Geopend 8 februari 2016].

  28. [28]A. Abel, „What's this Owin Stuff About,” 20 mei 2014. [Online]. Available: https://coding.abel.nu/2014/05/whats-this-owin-stuff-about/. [Geopend 23 februari 2016].

  29. [29]  J. Corioland, „Using OWIN tot test yout web api controllers,” 1 april 2014. [Online]. Available: http://www.juliencorioland.net/archives/using-owin-to-test-your-web-api- controllers#.VyYCJaOLTxs. [Geopend 1 mei 2016].

  30. [30]  J. Atten, „ASP.NET Web Api 2.2: Create a Self-Hosted OWIN-Based Web Api from scratch,” 11 januari 2015. [Online]. Available: http://johnatten.com/2015/01/11/asp-net- web-api-2-2-create-a-self-hosted-owin-based-web-api-from-scratch/. [Geopend 1 maart 2016].

  31. [31]B. Hall, „Introduction to XUnit,” 6 januari 2008. [Online]. Available: http://blog.benhall.me.uk/2008/01/introduction-to-xunit/. [Geopend 11 februari 2016].

  32. [32] P. Thiagarajan, „Unit testing OWIN applications using TestServer,” 26 november 2013. [Online]. Available: https://blogs.msdn.microsoft.com/webdev/2013/11/26/unit-testing- owin-applications-using-testserver/. [Geopend 2 mei 2016].

  33. [33]D. Cazzulino, „Moq 4,” Github, 11 februari 2016. [Online]. Available: https://github.com/moq/moq4. [Geopend 2 maart 2016].

  34. [34] msdn Microsoft, „Data-tier Applications,” 2016. [Online]. Available: https://msdn.microsoft.com/en-us/library/ee210546.aspx. [Geopend 10 maart 2016].

  35. [35]Msdn Microsoft, „Extract, Publish, and Register .dacpac Files,” 2016. [Online]. Available: https://msdn.microsoft.com/en-us/library/jj860455(v=vs.103).aspx. [Geopend 10 maart 2016].

  36. [36]  J. Chase, „AngularJS with Web API: server side paging,” 24 juni 2015. [Online]. Available: https://code.msdn.microsoft.com/AngularJS-with-Web-API-43e5de16. [Geopend 8 maart 2016].

  37. [37]  J. Skinner, „FluentValidation,” 21 Augustus 2015. [Online]. Available: https://github.com/JeremySkinner/FluentValidation/blob/master/README.md. [Geopend 15 februari 2016].

  38. [38]  K. Dockx, „JSON patch (JsonPatchDocument) RFC 6902 implementation for .NET,” 26 april 2016. [Online]. Available: https://github.com/KevinDockx/JsonPatch. [Geopend 4 april 2016].

  39. [39]  Trethaller, „How to link exceptions to requests in Application Insights on Azure?,” 12 juni 2015. [Online]. Available: http://stackoverflow.com/questions/30485385/how-to- link-exceptions-to-requests-in-application-insights-on-azure. [Geopend 2 mei 2016].

Download scriptie (7.21 MB)
Universiteit of Hogeschool
Odisee
Thesis jaar
2016
Promotor(en)
Joris Maervoet