예제 #1
0
        static void Main(string[] args)
        {
            //Bunlar şubedeki arkadaşın secebileceği kredi seçenekleri
            ICreditManager ihtiyacKrediManager    = new İhtiyacKrediManager(); //İnterfaceler, o interfaceyi implemente eden classin referans numarasını tutabilir.
            ICreditManager mortgageCreditManager  = new MortgageCreditManager();
            ICreditManager transportCreditManager = new TransportCreditManager();


            CreditApplicationManager creditApplicationManager = new CreditApplicationManager();
            DatabaseLoggerService    databaseLoggerService    = new DatabaseLoggerService(); //aslında alternatif olarak alt satırdaki kodda parametreye "new DatabaseLoggerService()" girilebilir.

            creditApplicationManager.BasvuruYap(ihtiyacKrediManager, databaseLoggerService); //çıktı ihtiyac kredisi hesaplandı!

            //ICreditManager'de bir veri tipidir.
            List <ICreditManager> credits = new List <ICreditManager>()
            {
                ihtiyacKrediManager, mortgageCreditManager, transportCreditManager
            };

            Console.WriteLine("Liste tipinde birden çok kredi türünü hesaplama!: ");
            creditApplicationManager.CreditPreNotification(credits);

            Console.WriteLine("---------------------");
            MortgageCreditManager mortgageCreditManager1 = new MortgageCreditManager();

            creditApplicationManager.BasvuruYap(mortgageCreditManager1, new FileLoggerService());
        }
예제 #2
0
        static void Main(string[] args)
        {
            //ConsumerLoanManager consumerLoanManager = new ConsumerLoanManager();
            //consumerLoanManager.Calculate();

            //VehicleLoanManager vehicleLoanManager = new VehicleLoanManager();
            //vehicleLoanManager.Calculate();

            //MortgageLoanManager mortgageLoanManager = new MortgageLoanManager();
            //mortgageLoanManager.Calculate();


            //Interfaceler diger classlardaki inherite olabilir. Cunku tum kredi hesaplama yontemlerinde miras almistir.

            //ILoanBaseManager consumerLoanManager1 = new ConsumerLoanManager();
            //consumerLoanManager1.Calculate();

            //ILoanBaseManager vehicleLoanManager1 = new VehicleLoanManager();
            //vehicleLoanManager1.Calculate();

            //ILoanBaseManager mortgageLoanManager1 = new MortgageLoanManager();
            //mortgageLoanManager1.Calculate();



            ILoanBaseManager consumerLoanManager2  = new ConsumerLoanManager();
            ILoanBaseManager vehicleLoanManager2   = new VehicleLoanManager();
            ILoanBaseManager mortgageLoanManager2  = new MortgageLoanManager();
            ILoanBaseManager tradesmanLoanManager2 = new TradesmanLoanManager();


            ILoggerService databaseLoggerService = new DatabaseLoggerService();
            ILoggerService fileLoggerService     = new FileLoggerService();
            ILoggerService smsLoggerService      = new SmsLoggerService();

            List <ILoggerService> services = new List <ILoggerService>()
            {
                databaseLoggerService, smsLoggerService
            };

            CreditApplicationManager creditApplicationManager = new CreditApplicationManager();

            //creditApplicationManager.CreditApplication(consumerLoanManager2, databaseLoggerService);

            creditApplicationManager.CreditApplication(tradesmanLoanManager2, services);

            List <ILoanBaseManager> loans = new List <ILoanBaseManager>()
            {
                consumerLoanManager2, vehicleLoanManager2, mortgageLoanManager2
            };
            //creditApplicationManager.ProvideCreditPreNotification(loans);

            //Interfaceleri birbirinin alternatifi olan ama kod icerikleri birbirinden farkli olan durumlar icin kullaniriz.
            //Bu yaptigimiz ornekte tum krediler hesaplama ortak bir nokta vardir. Ancak kodlari farkli kurallari vardir.
            //Kredinin turlerine hesaplama turleri degiskenlik gosterir.
        }
예제 #3
0
        static void Main(string[] args)
        {
            ConsumerLoan   consumerLoan   = new ConsumerLoan();
            VehicleLoan    vehicleLoan    = new VehicleLoan();
            ICreditManager dwellingCredit = new DwellingCredit();


            CreditApplicationManager creditApplicationManager = new CreditApplicationManager();

            creditApplicationManager.GetApplication(consumerLoan, new DatabaseLoggerService());

            List <ICreditManager> credits = new List <ICreditManager>()
            {
                consumerLoan, dwellingCredit
            };

            //creditApplicationManager.CreditEvaluation(credits);
        }
예제 #4
0
        static void Main(string[] args)
        {
            IBankCreditManager carCreditManager             = new CarCreditManager();
            IBankCreditManager houseCreditManager           = new HouseCreditManager();
            IBankCreditManager personelFinanceCreditManager = new PersonalFinanceCreditManager();
            ILoggerService     databaseLoggerService        = new DatabaseLoggerService();
            ILoggerService     fileLoggerService            = new FileLoggerService();
            ILoggerService     smsLoggerService             = new SmsLoggerService();

            List <ILoggerService> loggers = new List <ILoggerService>()
            {
                databaseLoggerService, fileLoggerService, smsLoggerService
            };

            CreditApplicationManager creditApplicationManager = new CreditApplicationManager();

            creditApplicationManager.CreditApplication(personelFinanceCreditManager, loggers);

            List <IBankCreditManager> bankCreditManagers = new List <IBankCreditManager>()
            {
                personelFinanceCreditManager, carCreditManager, houseCreditManager
            };
            //creditApplicationManager.GetCreditInformation(bankCreditManagers);
        }
예제 #5
0
        static void Main(string[] args)
        {
            //---------INTERFACES-----------//----------POLIMORFISM-----------//

            // Yıldızlı not - Interface'leri birbirinin alternatifi olan ama kod içerikleri farklı olan durumlar için kullanırız!

            // Interface'ler de o interface'i implemente eden class'ı ve yani referansını tutabiliyorlar.

            // Loglama - kim ne zaman hangi operasyonu çağırdı; sistemde olan hareketlerin dökümüdür. Veri tabanı, dosya, sms, mail olarak tutulabilir.

            // Mesela Log için de interface kullanılır. Farklı tutma yolları için.



            //- PersonalFinanceCreditManager ihtiyacKrediManager = new PersonalFinanceCreditManager();
            //- ihtiyacKrediManager.Calculate();

            //- TransportCreditManager tasitKrediManager = new TransportCreditManager();
            //- tasitKrediManager.Calculate();

            //- MortgageLoanManager konutKrediManager = new MortgageLoanManager();
            //- konutKrediManager.Calculate();

            // Bu şekilde ekrana kredilerin içindeki kodu yazdıracaktır.

            // Ancak önemli nokta şudur ki:

            //- ICreditManager ihtiyacKredisiManager = new PersonalFinanceCreditManager();
            //- ihtiyacKredisiManager.Calculate();

            // Hepsi interface'imizi kullanarak da aynen çalışabilir.
            //
            //

            //---------------------CreditApplicationManager düzenledikten sonra ise şunu yaptık----------------------//

            ICreditManager konutKrediManager   = new MortgageLoanManager();
            ICreditManager ihtiyacKrediManager = new PersonalFinanceCreditManager();
            ICreditManager tasitKrediManager   = new TransportCreditManager();

            // Bunların ekrandaki açılır kutu ve seçenekleri olduğunu düşünelim.


            ILoggerService databaseLoggerService = new DatabaseLoggerService(); // bunları da oluşturduğumuz için sonradan newledik.
            ILoggerService fileLoggerService     = new FileLoggerService();     //
            ILoggerService smsLoggerService      = new SmsLoggerService();      // bunlar üç loglama alternatifi

            // Birden fazla loglama için liste, şimdi aşağıda başvuru yerinin ikinci parametresi loggers yapmak yeterli olacak.
            List <ILoggerService> loggers = new List <ILoggerService> {
                fileLoggerService, databaseLoggerService, smsLoggerService
            };                                                                                                                      // neleri istersek ekleriz.


            CreditApplicationManager creditApplicationManager = new CreditApplicationManager();

            creditApplicationManager.MakeAnApplication(tasitKrediManager, loggers); // databaseLogger ve fileLogger oluşturunca istedi, parametreye ekledik

            // Yukarıda ise kullanıcının kredilerden birini seçtiğini, bu seçim ile de üstteki parametreye o seçimin eklendiğini düşünelim.
            // Bu kod kredi başvuru class'ına gider ve orada da taşıt kredisi atandığı için taşıt kredisi class'ının hesaplaması çalışır.
            // Bu yüzden de ekrana sadece Taşıt kredisi ödeme planı hesaplandı yazar.

            // Soyutlama yani bu OOP3 Projesinde anlatılanlar son derece önemlidir. İşe kabul ettirecek bilgilerdir.


            // Kredi ön bilgilendirmesi yap kısmından sonra buraya geldik. Orada parametre içine sayısı belirsiz olduğu için List yapmıştık.
            List <ICreditManager> krediler = new List <ICreditManager>()
            {
                tasitKrediManager, ihtiyacKrediManager
            };                                                                                                    // süslü parantezlerin içi: müşterinin bilgi almak istediği kredilerden seçtiğini varsayalım.
            //- creditApplicationManager.GiveCreditPreInformation(krediler); // krediönbilgilendirmesiyap(kredilerden) demek.

            // yeni kredi oluşturmamız istendi diyelim, esnaf kredisi gibi. SOLID'in O harfi (sisteme yeni özellik eklendiğinde sistem bozulmaz)
            // yeni class'ı ekleriz hesapla kısmını simüle ederiz.
            // Başvuru kodunun (yukarda) ilk parametresini new EsnafKredisiManager() yaparız. ( ya da orada new'lemek yerine diğerleri gibi üzerinde instence yaparız.)

            // ayın şey loglama için de geçerli. artık sms de yollayalım dedik. smsLoggerService class'ı oluşturduk.
            // :ILoggerService ekleyip implement edip public void Log() { cw( "sms yollandı" ) } deriz.
            // Program cs kısmında başvuru ikinci parametresini new smsLoggerService() yapar ya da diğerleri gibi üstte new'leriz. (alternatif yollardır)

            // Bu yaptıklarımız Polimorfizmdir.
        }
예제 #6
0
        static void Main(string[] args)
        {
            // Interface***
            // Kredilerin instancelarını oluştuşma
            //PersonalFinanceCreditManager personalFinanceCreditManager = new PersonalFinanceCreditManager();
            //personalFinanceCreditManager.CalculateCredit();

            //VehicleCreditManager vehicleCreditManager = new VehicleCreditManager();
            //vehicleCreditManager.CalculateCredit();

            //HousingCreditManager housingCreditManager = new HousingCreditManager();
            //housingCreditManager.CalculateCredit();

            //---------------------------------------
            // Interface'lerde interface'i implement eden sınıfların referans numarasını tutabilir.
            // Inheritance'taki gibi.

            // Ekran seçimleri olarak düşün.
            ICreditManager personalFinanceCreditManager = new PersonalFinanceCreditManager();
            //personalFinanceCreditManager.CalculateCredit();

            ICreditManager vehicleCreditManager = new VehicleCreditManager();
            //vehicleCreditManager.CalculateCredit();

            ICreditManager housingCreditManager = new HousingCreditManager();
            //housingCreditManager.CalculateCredit();

            //Başvuru yapma:
            CreditApplicationManager creditApplicationManager = new CreditApplicationManager();
            // Bir KrediManager istiyor.
            //creditApplicationManager.Apply(housingCreditManager);
            //Hata verdi, logger eksik!
            // İki yol:
            //creditApplicationManager.Apply(housingCreditManager, new FileLoggerService())
            ILoggerService databaseLoggerService = new DatabaseLoggerService();
            ILoggerService fileLoggerService     = new FileLoggerService();

            //creditApplicationManager.Apply(housingCreditManager, fileLoggerService);
            // Başvuru yap konut kredisine göre ve loglamayı dosyaya yapacak şekilde demektir.
            // Bu yazılımda sürdürülebilirliği sağlar!

            Console.WriteLine("------------------------------------------------");
            // ICreditManager bir interface, new'lenemez, verilemez!

            /* ICreditManager'ı implemente eden Ev,Taşıt,İhtiyaç KrediManagerlarından
             * hangisi istenirse gönderebiliriz.
             * Gönderilen KrediManager'a göre de başvur metodunda bulunan hesaplama
             * operasyonu KrediManager'ın kendi hesaplama operasyonuna denk gelir.
             */
            // housingCreditManager seçildiği için Ev Kredisi'nin Hesapla kuralı, metodu çalışır.

            // Some kind of Mülakat Question :))))

            /* Kredi çekmek isteyen Müşteri için uygun kredileri seçip,
             * Parametre olarak bir Liste yollanır. Listeyi alan metot
             * listeyi dönerek bilgilendirme yapar.
             */

            //Bilgilendirme için kredi seçimi/kredi listesi seçimi ve bilgilendirme yapılması:
            List <ICreditManager> credits = new List <ICreditManager>()
            {
                personalFinanceCreditManager, vehicleCreditManager
            };

            creditApplicationManager.CreditPriorInfo(credits);

            // SOLID'in O'su: Open for extension, Close for modification.
            // Yeni bir özellik eklenirse mevcut kodlar bozulmaz!

            // Esnaf Kredisi ekleyelim.
            Console.WriteLine("---------------------------------");
            ICreditManager tradesmanCreditManager = new TradesmanCreditManager();

            creditApplicationManager.Apply(tradesmanCreditManager, new List <ILoggerService> {
                new DatabaseLoggerService(), new SmsLoggerService()
            });
            //Liste yapıpta yollayabilirdik ama yukarıdaki gibide yollanabilir.

            Console.WriteLine("---------------------------------");
            // Yeni bir Loglama yöntemi eklenilmesi istensin.
            // Sms Loglaması ekleyelim.
            //creditApplicationManager.Apply(tradesmanCreditManager, new SmsLoggerService());
            ILoggerService smsLoggerService = new SmsLoggerService();

            //creditApplicationManager.Apply(tradesmanCreditManager, smsLoggerService);
            creditApplicationManager.Apply(tradesmanCreditManager, new List <ILoggerService> {
                new SmsLoggerService()
            });
            // Yapılanların hepsi polymorphism örneğidir.

            Console.WriteLine("---------------------------------");
            List <ILoggerService> loggerServices = new List <ILoggerService> {
                new SmsLoggerService(), new DatabaseLoggerService(), new FileLoggerService()
            };

            creditApplicationManager.Apply(housingCreditManager, loggerServices);
        }