/// <summary>
        /// Start processing person object from reading, parsing, validating, sorting, and writing to output file
        /// </summary>
        /// <param name="reader">person data provider</param>
        /// <param name="parser">person data parser</param>
        /// <param name="writer">person data writer</param>
        /// <param name="validator">person data validator</param>
        /// <param name="sorter">person data sorter</param>
        /// <returns>List of persons</returns>
        public IList <PersonDTO> Process()
        {
            Messages = new List <String>();

            var providedData = _reader.Read();

            var parsedData = _parser.Parse(providedData);

            var validatedData = _validator.Validate(parsedData);

            var sortedData = _sorter.Sort(validatedData);

            _writer.Write(sortedData);

            Messages = Messages.Concat(_validator.Messages);

            return(sortedData);
        }