using System.Collections.Generic;
public static void Main()
var program = new Program();
ISettingService settingSvc = new FileSettingService();
IContext mockContext = new MockContext();
ITSRepository tsRepository = new TSRepository(settingSvc, mockContext);
ITSService tsService = new TSService(tsRepository);
Console.WriteLine("Try to enter either ABC123 or DEF456 or anything else you want...");
Console.Write("Enter employee number to fire:");
var employeeNumber = Console.ReadLine();
var result = tsService.FireEmployee(employeeNumber);
Console.WriteLine("{2}Employee {0} {1}", employeeNumber, result ? " is fired!" : "", !result ? "Unable to fire " : "");
var employee = tsRepository.GetEmployee(employeeNumber);
Console.WriteLine("Employee Number: {0} Name: {1} {2} Fired: {3}", employee.Number, employee.FirstName, employee.LastName, employee.Fired);
public string Number { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Fired { get; set; }
public interface ITSRepository
Employee GetEmployee(string employeeNumber);
void UpdateEmployee(Employee employee);
public interface ITSService
bool FireEmployee(string employeeNumber);
public interface ISettingService
string GetTSConnectionString();
public class FileSettingService : ISettingService
public string GetTSConnectionString()
return "RESULT_CONNECTION_STRING_HERE";
public class TSService : ITSService
private readonly ITSRepository _repository;
public TSService(ITSRepository repository)
_repository = repository;
public bool FireEmployee(string employeeNumber)
var employee = _repository.GetEmployee(employeeNumber);
if (employee == null) return false;
if (employee.Fired) return false;
_repository.UpdateEmployee(employee);
public class TSRepository: ITSRepository
private readonly ISettingService _settings;
private readonly IContext _context;
public TSRepository(ISettingService settings, IContext context)
_context.SetConnectionString(_settings.GetTSConnectionString());
public Employee GetEmployee(string employeeNumber)
var result = _context.ExecuteQuery("SELECT Number, FirstName, LastName FROM Employee WHERE Number = " + employeeNumber);
return result as Employee;
public void UpdateEmployee(Employee employee)
_context.ExecuteCommand(string.Format("UPDATE Employee SET FirstName={0}, LastName={1}, Fired={2} WHERE Number={3}",
employee.FirstName, employee.LastName, employee.Fired, employee.Number));
public interface IContext
void SetConnectionString(string connectionString);
object ExecuteQuery(string query);
void ExecuteCommand(string query);
public class MockContext : IContext
private Dictionary<string, Employee> _data = new Dictionary<string, Employee> {
{"ABC123", new Employee { Number = "ABC123", FirstName = "John", LastName = "Doe", Fired = false }},
{"DEF456", new Employee { Number = "DEF456", FirstName = "Jane", LastName = "Doe", Fired = true }}
private string _connectionString;
public void SetConnectionString(string connectionString)
_connectionString = connectionString;
public void ExecuteCommand(string query)
var employeeNumber = query.Substring(query.LastIndexOf("= ") + 2);
var hasMatch = _data.ContainsKey(employeeNumber);
var match = _data[employeeNumber];
public object ExecuteQuery(string query)
var employeeNumber = query.Substring(query.LastIndexOf("= ") + 2);
var hasMatch = _data.ContainsKey(employeeNumber);
var result = _data[employeeNumber];