Strategy Pattern in .NET: Listing 5

Person class after strategy pattern

Listing 5: Person.cs

using System;
using System.Collections.Generic;
 
namespace VSMStrategyPatternDemo
{
    public class Person
    {
        public enum PersonType
        {
            Employer,
            Employee,
            Customer
        }
 
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public DateTime? DateOfBirth { get; set; }
        public int SSN { get; set; }
        public int EIN { get; set; }
 
        public PersonType Type { get; set; }
 
        private static Dictionary<PersonType, IPersonValidationStrategy> _validationStategies;
 
        public Person()
        {
            _validationStategies = new Dictionary<PersonType, IPersonValidationStrategy>();
            _validationStategies.Add(PersonType.Employer, new EmployerValidationStrategy());
            _validationStategies.Add(PersonType.Employee, new EmployeeValidationStrategy());
            _validationStategies.Add(PersonType.Customer, new EmployeeValidationStrategy());
        }
 
        public bool IsValid()
        {
            return _validationStategies[Type].IsValid(this);
        }

        public override string ToString()
        {
            return String.Format("{0} {1} {2:M/d/yyyy}", FirstName, LastName, DateOfBirth);
        }

    }
}

About the Author

Eric Vogel is a Senior Software Developer for Red Cedar Solutions Group in Okemos, Michigan. He is the president of the Greater Lansing User Group for .NET. Eric enjoys learning about software architecture and craftsmanship, and is always looking for ways to create more robust and testable applications. Contact him at [email protected].

comments powered by Disqus

Featured

  • Poisson Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demo of Poisson regression, where the goal is to predict a count of things arriving, such as the number of telephone calls received in a 10-minute interval at a call center. When your source data is close to mathematically Poisson distributed, Poisson regression is simple and effective.

  • Cloud-Focused .NET Aspire 9.1 Released

    Along with .NET 10 Preview 1, Microsoft released.NET Aspire 9.1, the latest update to its opinionated, cloud-ready stack for building resilient, observable, and configurable cloud-native applications with .NET.

  • Microsoft Ships First .NET 10 Preview

    Microsoft shipped .NET 10 Preview 1, introducing a raft of improvements and fixes across performance, libraries, and the developer experience.

  • C# Dev Kit Previews .NET Aspire Orchestration

    Microsoft's dev team has been busy updating the C# Dev Kit, a Visual Studio Code extension that enhances the C# development experience by providing tools for managing, debugging, and editing C# projects.

  • Hands On: New VS Code Insiders Build Creates Web Page from Image in Seconds

    New Vision support with GitHub Copilot in the latest Visual Studio Code Insiders build takes a user-supplied mockup image and creates a web page from it in seconds, handling all the HTML and CSS.

Subscribe on YouTube

Upcoming Training Events