示例#1
0
        private void ValidateCache()
        {
            if (IsCacheValid)
            {
                return;
            }

            try
            {
                _cachedItems  = _wrappedReader.GetPeople();                 // We can use any DataReader we want. We just have to configure it in the App.xaml. We can e.g. start and then stop the ServiceReader to test the cache...
                _dataDateTime = DateTime.Now;
            }
            catch
            {
                _cachedItems = new List <Person>()
                {
                    new Person()
                    {
                        GivenName  = "No Data Available",
                        FamilyName = string.Empty,
                        Rating     = 0,
                        StartDate  = DateTime.Today,
                    }
                };
                InvalidateCache();
            }
        }
示例#2
0
        private async Task ValidateCache()
        {
            if (IsCacheValid)
            {
                return;
            }

            try
            {
                _cachedItems = await _wrappedReader.GetPeople();

                _dataDateTime = DateTime.Now;
            }
            catch
            {
                _cachedItems = new List <Person>()
                {
                    new Person()
                    {
                        GivenName  = "No Data Available",
                        FamilyName = string.Empty,
                        Rating     = 0,
                        StartDate  = DateTime.Today,
                    }
                };
                InvalidateCache();
            }
        }
示例#3
0
        private static void ShowPeople(RepositoryType repositoryType)
        {
            IPersonReader        repository = RepositoryFactory.GetRepository(repositoryType);
            IEnumerable <Person> people     = repository.GetPeople();

            foreach (var person in people)
            {
                Console.WriteLine(GetPersonInformation(person));
            }
        }
示例#4
0
 public async Task <IReadOnlyCollection <Person> > GetPeople()
 {
     try
     {
         return(await _wrappedReader.GetPeople());
     }
     catch (Exception ex)
     {
         _logger?.LogException(ex);
         throw;
     }
 }
        private void FetchData(IPersonReader reader)
        {
            ClearListBox();

            var people = reader.GetPeople();

            foreach (var person in people)
            {
                PersonListBox.Items.Add(person);
            }

            ShowReaderType(reader);
        }
示例#6
0
        public async Task <IEnumerable <Person> > GetPeople()
        {
            try
            {
                return(await _wrappedReader.GetPeople());
            }
            catch (Exception ex)
            {
                await _logger?.LogException(ex);

                throw;
            }
        }
示例#7
0
        private void FetchButton_Click(object sender, RoutedEventArgs e)
        {
            ClearListBox();

            IPersonReader repository = RepositoryFactory.GetRepository();
            var           people     = repository.GetPeople();

            foreach (var person in people)
            {
                PersonListBox.Items.Add(person);
            }

            ShowRepositoryType(repository);
        }
示例#8
0
        private void PopulateData(string repositoryType)
        {
            ClearListBox();
            IPersonReader repository = RepositoryFactory.GetRepository(repositoryType);

            var people = repository.GetPeople();

            foreach (var person in people)
            {
                PersonListBox.Items.Add(person);
            }

            ShowRepositoryType(repository);
        }
        private void FetchData(string readerType)
        {
            ClearListBox();

            IPersonReader reader = ReaderFactory.GetReader(readerType);

            var people = reader.GetPeople();

            foreach (var person in people)
            {
                PersonListBox.Items.Add(person);
            }

            ShowReaderType(reader);
        }
示例#10
0
        static void Main(string[] args)
        {
            //foreach accepts IEnumerable so it is maintainable if something changes
            //So declaring the variable as IEnumerable if we change our data structure in the future, the code here stays the same
            Console.WriteLine("Without interface example");
            var personRepo = new PersonRepository();
            IEnumerable <Person> persons = personRepo.GetPeople();

            foreach (var person in persons)
            {
                Console.WriteLine(person.Name);
            }
            Console.WriteLine("--------------");

            //Below we call the one service we created using the interface
            //If we ever want to use a new service, we create a new service repo implementing the interface and we change the code only below in the declaration
            //That's the beauty of interfaces

            //IPersonRepository list_service = new PersonRepository();
            //IPersonRepository list_service = RepositoryFactory.GetRepository("Person");
            Console.WriteLine("Interface and factory method example");
            IPersonReader list_service = RepositoryFactory.GetRepository("Person");

            //var personToAdd = new Person { Id = 3, Name = "Mary" };
            //list_service.AddPerson(personToAdd);
            IEnumerable <Person> list_service_items = list_service.GetPeople();

            foreach (var person in list_service_items)
            {
                Console.WriteLine(person.Name);
            }
            Console.WriteLine("--------------");

            //Note : We have to be careful and not use a lot of interfaces because there is the danger that the code will become more complex
            //Go to implentation is weird when using interfaces. Debugging and step into is a solution that take us to the correct implementation

            //Dependency Injection example
            Console.WriteLine("Dependency injection example");
            //If we ever change the service we only modify the following line and we are done
            IPersonReader        depend_inj_instance = new PersonRepository();
            var                  generalRepo         = new GeneralDIrepository(depend_inj_instance);
            IEnumerable <Person> list_service_items2 = generalRepo.GetAll();

            foreach (var person in list_service_items2)
            {
                Console.WriteLine(person.Name);
            }
        }
示例#11
0
        private void Populate(string repository)
        {
            ClearListBox();

            //IPersonRepository personRepository = RepositoryFactory.GetRepository(repository);

            // 5. Designing Effective Interfaces - Interface Segregation Principle
            IPersonReader personRepository = RepositoryFactory.GetRepository(repository);

            var persons = personRepository.GetPeople();

            foreach (var person in persons)
            {
                PersonListBox.Items.Add(person);
            }
            ShowRepositoryType(personRepository);
        }
 public IReadOnlyCollection <Person> GetPeople()
 {
     _retryCount++;
     try
     {
         var people = _wrappedReader.GetPeople();
         _retryCount = 0;
         return(people);
     }
     catch (Exception)
     {
         if (_retryCount >= 3)
         {
             throw;
         }
         Thread.Sleep(_retryDelay);
         return(this.GetPeople());
     }
 }
 private void ValidateCache()
 {
     if (_cachedItems == null || !IsCacheValid)
     {
         try
         {
             _cachedItems  = _wrappedReader.GetPeople();
             _dataDateTime = DateTime.Now;
         }
         catch
         {
             _cachedItems = new List <Person>()
             {
                 new Person()
                 {
                     GivenName = "No Data Available", FamilyName = string.Empty, Rating = 0, StartDate = DateTime.Today
                 },
             };
         }
     }
 }
示例#14
0
        public async Task <IEnumerable <Person> > GetPeople()
        {
            _retryCount++;
            try
            {
                var people = await _wrappedReader.GetPeople();

                _retryCount = 0;
                return(people);
            }
            catch (Exception)
            {
                if (_retryCount >= 3)
                {
                    throw;
                }
                await Task.Delay(_retryDelay);

                return(await this.GetPeople());
            }
        }
        static void FetchData()
        {
            WriteLine();
            WriteLine("=================");

            IPersonReader reader = ReaderFactory.GetReader();

            var people = reader.GetPeople();

            foreach (var person in people)
            {
                WriteLine(person.ToConsoleRecord());
            }

            WriteLine("=================");

            ShowReaderType(reader);

            WriteLine("=================");
            WriteLine();
            WriteLine("Press any key to continue...");
            ReadKey();
        }
示例#16
0
 public void RefreshPeople()
 {
     People = DataReader.GetPeople();
 }
示例#17
0
 public void FetchData()
 {
     People = repository.GetPeople();
 }
示例#18
0
 public async Task RefreshPeople()
 {
     People = await Reader.GetPeople();
 }
示例#19
0
 public IEnumerable <Person> GetPeople()
 {
     return(DataReader.GetPeople());
 }
示例#20
0
 public async Task RefreshPeople()
 {
     People = await Repository.GetPeople();
 }
示例#21
0
 public IEnumerable <Person> GetAll()
 {
     return(personReader.GetPeople());
 }