Yazılımcının Çilesi Hakkında Herşey
0

Bu konuda 64 mesaj var

Biz ar≥ yapmıyoruz, sadece bodoslama "ge" yapıyoruz.UML kullanarak harcayacağınız zamanı patronlara anlatamazsınız. Örnek geliştirme süreci:

 

1) Müşteri: "A" modülü istiyorum.

2) Yöneticiler: 2 aya biter

3) Programcı: Uğraştığı projelerin yanına o "A" modülü eklenir, üstüne hiç hesapta olmayan x, y gibi "yav şunu da araya sıkıştır" işleri çıkartılır.

 

O "A" modülü sürekli araya sokulan işler diğer projelerin işleriyle beraber 4-5 ay sonra yarım yamalak biter!. "Biter" kısmı lafın gelişidir tabii.

 

İşi yetiştirmek için bazen işte o örnek verilen "akla ilk gelen çözüm" tipi kodlamalar yapılması da kaçınılmaz oluyor.

 

Sadece yazılımda değil, her işimiz böyle bizim. Toplumsal karakter meselesi (saç baş yolduran toplum bugı diyebiliriz buna : : :P

 

Sevgili Berkan;

 

11 senedir yazılım geliştirme sektöründeyim. Kurumsal, kurumsalımsı  :) kamu, özel, uluslararası, cemaat, yandaş aklına gelen her türlü kuruma girdim çıktım, iş yaptım, danışmanlık hizmeti verdim. Bu anlattığın hemen her yerde yaşandı. Buradan naçizane çıkarılacak ders bence "Bizim herşeyimiz ters" değil. Aksine bir çözüm üretmek gerekiyor ve aslında bu zaten dünyanın her yerinde yaşanıyor ve yıllardır da farklı çözümler üretiliyor. Çok tasarım, en son kodlama çok güzel ve en ideal yöntem ama maalesef pratikte işlemiyor, işlemedi, istisnalar dışında da işlemeyecek. Rapid Development, Extreme Programming, Agile Development ve onun alt dalı olan Scrum da bu tip sorunlara çözüm bulmak için yeniden tasarlanmış ve üretilmiş proje metodolojileri. Geçmiş tecrübeler gösteriyor ki, müşterilerin (iç veya dış) talepleri sürekli değişiyor ve yenileniyor. Bu yüzden hem yazılımı buna uygun tasarlamak hem de metodolijiyi buna uygun seçmek lazım. Artık bir çok yazılım firması proje satmıyor, Scrum tabiriyle "Sprint" satıyor. Müşteri yeni bir talepte bulunursa bunu bir sonraki sprinte/versiyona alıyor ve oradan devam ediyor. 

 

Ha tabi bunlar kesin çözüm mu, elbette değil. MVC için söylediğimi yinelemem lazım, bu iş insanda bitiyor ve yazılım geliştirmek akıllı insan işi. Şu an belli bir zeka ve bilgi seviyesinin altındaki kişiler başka işleri tercih etselerdi sektörde ciddi rahatlama yaşanırdı herhalde  :D

 

Bu arada Test Driven Development'a kafayı takmış durumdayım şu an. Mevctu çalıştığım kurumda olacak gibi değil ama başka bir yerde veya şahsıma proje geliştirirken mutlaka deneyeceğim. Klasik yazılım geliştirme yaklaşımlarını tersine çeviriyor,Türk insanına da uygun gibi geldi bana :D Önce test metodu yazıyorsun, sıfırdan, "E bu çalışmıyor" diyorsun  :D çalıştırmak için gerekli minimum kodu yazıyorsun, sonra öbürüne geçiyorsun, en kısa halde bu kadar özetleyebilirim herhalde. 

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Müşteri ihtiyaçlarına en hızlı şekilde, kaliteli (atlamışım sonradan ekliyorum, en yüksek kar marjıyla tabii ki) çözümü nasıl sunarız? Yazılım sektörümüz bu sorudan ibaret olmamalı hocam önce bu mantıktan kurtulmamız lazım.

 

Devamını şöyle getireyim, şimdi konu bambaşka yöne kayacak ama yapacak bir şey yok :D.

 

Ben o "test driven" mevzusuna, bunun benzeri fonsiyonel programlama (kafayı yedirir adama :P, sağ elini kullanan adama sol elini kullandırmaya kalkarsan beyni patlarmış bu da öyle bir şey) olaylarına da temelde gıcığım var :D. Neden mi?

 

Bu mantığı geliştiren biz değiliz. Bu şekilde programlama yapmaya ufaktan yönlendiriliyoruz ama o mantığı ilk geliştiren ben değilim ki... "Bilgisayar bilimi" dediğimiz şey bu ama yok bizde. Ben "test driven" programlama yapmak istemiyorum, ben "test driven" programlamayı ortaya koyan olmak istiyorum. Primadi bu şekilde yükseltmediğimiz sürece bir halt olmaz bizden hiç kimse kusura bakmasın. Bir büyüğümüz "bizden ancak işçi olur" demişti o geldi aklıma.

 

Özetle anlatmak istediğim şu: hep "program", "programcı" kelimelerini kullanıyorum ama bunlara ince ayrım koyarak "software engineer", "software developer", "computer programmer" veya benim mevcut ünvanım "programmer analsyt zzzzzzzzz" gibi tiki kategorilere ayırıyorlar. Bunların en babası sanırım "öz hakiki computer programmer", hah işte biz bundan olamıyoruz mesela. Biz hepimiz "developer" modundayız, en bi lead pozisyonda çalışan adam dahil buna.

 

Bizdeki "developer" pozisyonundaki adamın yaptığı temel iş, başkasının fikirlerini vakit kaybetmeden koda çevirmekten ibaret, o kadar. Çünkü hızlı bir şekilde müşterinin ihtiyacı neyse çözülmesi gerekiyor. Değişik fikirlerle icat çıkaramazsınız. "Düşünme, sadece geliştir! Daha hızlı geliştireceksen yeni teknolojilere göz at, bakalım ne var ama fazla bakıp vakit kaybetme" :P. Başkasının geliştirdiği teknolojiyi kullanınca "kendini geliştirmiş" oluyorsun. Tam komedi...

 

Ne dolmuşum be :P.

 

Not: Kullandığım bu yazım tarzını sevmiyorsun biliyorum Kemal, lütfen kızma.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Sevgili Berkan;

 

Bu yazım tarzının neresini sevmeyim, neresine takılayım, siz beni nasıl biliyorsunuz, forumda ben nasıl bir imaj çizdim yahu? :D

 

Müşteri ihtiyaçlarına en hızlı şekilde, kaliteli (atlamışım sonradan ekliyorum, en yüksek kar marjıyla tabii ki) çözümü nasıl sunarız? Yazılım sektörümüz bu sorudan ibaret olmamalı hocam önce bu mantıktan kurtulmamız lazım.

 

Burada ve diğer yazdıklarından kastın herhalde biraz da Ar-Ge yapalım, bir yazılım metodolojisi üretelim, teknoloji üretelim demek istiyorsun. Tamam temelde çok doğru birşey söylüyorsun da bu tamamen farklı bir konu. Yazılım Sektörü'nde ürün/hizmet üretmek, piyasaya iş yapmak başka birşey, teknoloji geliştirmek ise çok daha başka. İkincisini yapman için üniversitelerinin, teknik eğitim kurumlarının adam gibi çalışması lazım en başta. Bugün ünversitelerde, bilgisayar/yazılım mühendisliği programlarında ne derece kaliteli eğitim veriliyor, öğrenciler ne düzeyde araştırmaya teşvik ediliyor, öğretim üyelerinin bilgi dağarcığı ne kadar geniş ve hepsinden önemlisi ne kadar güncel? Bu soruların hepsine birden olumsuz yanıt vermek mümkün. 

 

Yazılım Ar-Ge'sinin bir diğer ayağı da aslında Yazılım Sektörü'ne bağlı. Sektör ne kadar büyür, ne kadar ihtiyaç geliştirirse Ar-Ge yatırımı da o kadar artar. Biz halen emekleme safhasındayız. Teknoloji geliştirelim ama bunu yaparken veya yapmadan önce sektörü ayağa kaldıralım, insanları bilinçlendirelim, siyasal ve toplumsal farklındalığı artıralım ki bizden de Martin Fowler'lar, Kent Beck'ler çıksın ama "Bunlar bizden niye çıkmıyor" diye yakınmak, "Biz kendi teknolojimizi kullanalım, başkasınınki bize uymuyor" demek için henüz yeterince  olgunluğa ulaşmadık. Bu yüzden de sektörün duayenlerinin ürettiği, önerdiği teknolojileri, yöntemleri kullanmak en doğru çözümdür kanımca. Kısacası Amerika'yı yeniden keşfetmeye henüz gerek yok : :).

 

Programmer/Developer/Engineer ayrımı da ülkemizde pek net ve çok anlaşılmış da değil zaten. Benim belli bir kategorizasyonum var aslında, "Web Sitesi yapıyorum", "Bunu şurdan alıyorum, buraya koyuyorum oluyor" diyen adam programcı, "Denedim çalıştı, bu komponent çok iyiymiş, Fikri de kullanıyormuş memnunmuş, ben de ekledim hata vermedi, çalıştı, ellemedim" diyen adam Developer, "Dependency Injection için Castle Windsor mu, Unity mi kulanayım bilemedim, araştırıyorum  her ikisinin de olumlu olumsuz yanları var, stackoverflow'da sordum, birkaç öneri geldi" diyen adama da Engineer diyebiliyorum : :D.

 

İşin şakası bir tarafa Software Professional/Yazılım Profesyoneli ana başlığı altında bir sürü kırılıma gitmek gerek, Business Analyst, Software Architect, Lead/Senior/Junior Software Developer/Engineer, Software Projects Manager vs. gibi ki herkes uzman olduğu konuda katkı verebilsin. Ben bu ünvanların hepsine ve daha fazlasına, hem ayrı ayrı hem de birlikte sahip oldum bir dönem ama böyle birşey artık mümkün değil. Ülkemizde sık yapılan hatalardan birisi bu. Diğerlerine örnek vermem gerekirse İş Analistlerini ekibin en genç ve yetersizlerinden oluşturmak (Bu genelde kamu kurumlarında sık görülür), ekipde "Mimar" titrinde  kimseyi bulundurmamak, "Lead", "Senior" kavramlarını sadece meslekte geçirdiği yıl kriteri ile belirlemek, Proje Yöneticisinin hiçbir metodolojiye hakim olmaması, yazılım ile doğrudan bağlantısı olmasa da, faydası/zararı nedir diye bakmadan gidip aylarca kasıp PMP olması gibi sıralayabilirim. 

 

Anlat anlat bitmiyor, ne dolmuşuz arkadaş :D . Kısacası sektör çok tökezliyor ama bir şekilde ilerliyor. Bu işin duayenlerini takip ederek her bireyin kendini geliştirmesi en kısa yoldan çıkışı sunar bize. Üniversitelerimizde Martin Fowler kitapları okutulmaya başlandığında da ise kurtuluşumuz yakındır. 

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Yav bir keresinde yine böyle biraz sert bir eleştiri getirmiştim, biraz bozuk çalmıştın :D, dedim yazıp çizdik ama istemeden üzmeyeyim şimdi adamı :P.

 

Üniversiteler dedin beni benden aldın. Deve ve eğri meselesi işte hocam. Diyorum ya toplum olarak buglıyız. Şimdi ben üniversitelerin bilgisayar mühendisliği bölümlerinin neresinden tutsam elimde kalıyor. Tutturdular bir ara yapay sinir ağları diye herkes kademe almak için aynı konuda birbirinin kopyası hiç bir işe yaramayan şeylerle uğraşıp durdular ve bir arpa boyu yol alınmadı. AI ile ilgili tüm yenilikler yine dışarıdan geliyor. Neden çünkü amaç bir şeyler yapmak değil ki, doktora almak vs...Ha, bunlar kimler? Yine o yüzde 90' lık kesimden olanlar. O yüzde 10'luk kısımda olan adam üniversitede üç kuruşa bilmem kaç sene bebek bakıcılığı yapmaz.

 

Bilmiyorum, ben hiç iyimser bakmıyorum. Senin bahsettiğin gelişimi yapabilseydik şimdiye çoktan yapmış olmamız gerekiyordu. Biz o gelişimi yapasıya kadar adam Mars' da koloniyi kurmuş olacak hocam. Benim bir umudum yok. Biraz sivrilen zaten soluğu yurt dışında alıyor, sen sağ ben selamet...

 

Uzun lafın kısası şimdiye kadar hangi sektöre bu atılımı yaptık ki yazılım sektöründe yapabilelim? Yok yani, olmayacak.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

"Yok, olmayacak, bizden olmaz" da diyebiliriz tabi, belki de hakikaten olmaz ama çok sevdiğim bir laf vardır "Karanlığa küfredeceğine bir mum yak" diye, buna uygun şekilde bireysel veya küçük topluluklar olarak elimizden geleni de yapabiliriz. Örneğin yazılım profesyonelleri bireysel eğitimlerini düzenli bir şekilde, kaliteli kurumlardan, online kaynaklardan sürekli yaparlarsa belli bir aşamayı çok daha hızlı geçeriz.

 

Yazılım, daha da genellersek Bilgi Sistemleri sektörü diğerlerinden çok belirgin bir farkla ayrılıyor. Başka sektörlerdeki profesyoneller mevcut bilgileri ile 10 sene aynı işi sorunsuzca yapabilirlerken bu IT'de mümkün değil. Halen sektörün bu iç dinamiğine alışabilmiş değiliz, ne çalışan profesyoneller, ne de üniversiteler olarak. Birkaç seneye kadar halen Pascal öğreten üniversite vardı kardeşim, neyin kafasını yaşıyorsunuz diye sorarlar adama. Öğretim Üyesi kendini geliştiremiyor, müfredat çağın gerisinde, öğrencinin zaten aklı bir karış havada, E böyle nereye varacaksın? Yinelemiş olacağım adamın adını ama sonuna kadar hak ediyor, bugün Türkiye'deki hangi üniversite Martin Fowler'ı "Gel bizde konferans ver" diye çağırdı. Hepsiburada.Com ve sanırım Webrazzi girişimde bulundu da adam geçen sene geldi konuşma yaptı. Bu adam, yazılım geliştirmede çağ değiştiren kitabını (Patterns of Enterprise Application Architecture) 2002 yılında yazmış, 12 sene sonra sektörde faaliyet gösteren kurumların aracılığı ile, aslında iş için geliyor ülkemize. Üniversiteler niye çağırmadı bu adamı ve diğerlerini bunca sene? Çağırıyorlardır ben bilmiyorumdur belki, muhakkak yapanlar da vardır ama varsa da ülkedeki 3-5 üniversite ile sınırıldır. Kalan iki yüz'e yakın üniversite ne iş yapar? Yazılım Geliştirme alanında kaç makale yayımlanmış, ne yapılmış şu ana kadar? Berkan'ın söylediği doğru, bir aralar Yapay Sinir Ağları'na kafayı takmışlardı, bir dönem yine bağlantılı konu AI ile gittiler, bir dönem Speech Recognition'ın ekmeği yendi, çok güzel de biraz çeşit kardeşim.

 

Akademisyenlerin de çok dertleri var ama eğitim sistemi öğrenciyi, araştırmacı kişiyi ihtiyaç olan alana değil, kolay ilerlenebilir alana yönlendirdikçe bir sonuç üretmen zor. Bugün "Akademisyen olacağım" diyen yeni mezun adamın unvanı bile falso "Araştırma Görevlisi" ! Adama araştırmayı görev olarak veriyorsun. Araştırma, görev işi değil, ilgi, alaka, yetenek, merak, şüphe vs. işidir. Kısaca bilimin ta kendisidir bence. Neyse bu tarafları fazla kurcalamayım. O işle uğraşanların çok zorluklar yaşadığını biliyor ve tahmin ediyorum, üstelemek de istemiyorum.

 

Berkan, senin dediğine tekrar dönersem, evet birşey olmayabilir toplum olarak çok ileri gidemeyebiliriz ama bireysel olarak halen kimse için fırsat kaçmış değil kanımca. Herkes elinden geleni yapıp, sektördeki az bilgili, az yetenekli insan kaynağı profilini değiştirmek için uğraşmalı. Yapamayanlar yerinde sayar, yapanlar hızla yükselir. Bunca sıkıntısına rağmen yazılım geliştirme sektörü iyi para kazandıran pozisyonlar sunuyor, hala, bunca sıkıtnıya, ekonomik krize rağmen. Bunu değerlendirmek gerek.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

http://www.aspnetboilerplate.com

 

Bu siteyi biliyorsunuzudur. Çok beğenmiştim ama "Bunu kim yapmış" diye bakmamıştım daha önce. Geöçen gün arkadaşım söyledi, girdim baktım doğru. Adam bildiğin Türk veya bizden biri diyelim. Takdir ettim. İndirip denemiştim aylar önce, bazı eksikleri vardı ama fikir çok güzel, umarım tutar ve çok daha ileri gider.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Çok uzun yazmayacağım. Valla Kemal 1-2 istisna dışında üniversitelere "Martin Fowler" kim diye sorsan bir tane ben tanıyorum diyen çıksa çocuğumu keserim.

Karanlığa mum yakalım tamam da o muma sürekli üfleyip hatta tükürüp söndüren bir milletiz. Zamanında Niyazi Saral gibi bir adamı küstürdük el birliğiyle. Tekrarlamış olacağım ama benim bir umudum yok malesef. Boyun eğip, emekliliğimi kazanma derdine düştüm herkes gibi :P.

 

Bir de yazılım sektörü bu ülkede krizlerden ilk etkilenip en son toparlanan sektördür. Buna rağmen kazandırıyor ama ne kadar iyi kazandırıyor ona net bir şey söylemek zor. Böyle olmasa, biraz ar≥ yatırımı yapılsa güzel şeyler olacaktır ama kimse ar≥ riskine girmek istemiyor. Ar≥ yatırımından kastım öyle  birbirinin çakması endüstriye yönelik mikrodenetleyici veya kontrol, otomasyon sistemleri gibi kıytırık projeler değil.

 

Son olarak şu "Pascal" mevzusunu konuşabiliriz ayrıyeten. Ben buna çok katılmıyorum. Bizim zamanımızda Fortran vardı ders olarak (sonra Pascal' a döndü, C son sınıfta seçmeliydi). Herkesin tek söylediği "ııykk Fortran, geri kalmış üniversite", böyle diye diye dersi kaldırttılar. Fortran hala kullanılan bir dil yerine göre (Intel' in derleyicisi var eh yani). Ben hiç bir dili modası geçmiş veya lüzumsuz olarak görmüyorum. Seçim yanlış, ders içeriği yetersiz olabilir. Özellikle içerik son derece sıkıntılı. Öğrenciyi kendine çeken bir yapı yok içeriklerde, onu dolduracak kadro da yok zaten, eh geçmiş olsun.

 

Elin adamı ilkokullarda C dersi koyacak yakında biz neyi tartışıyoruz hala :D.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Sevgili Berkan;

 

Anlaşamadığımız noktayı daha net tespit etmek için yazıyorum. Biz henüz yazılım tarafında, tekonloji üretecek Ar-Ge yapacak konumda değiliz. Yapmamız gereken çağın trendlerini yakalamaya çalışmak, duaynelerin izinden gitmek ve verim-kalite-içerik-zaman boyutlarında en optimum ürünleri/hizmetleri üretmek. Bunu yapabilmek için de doğru eğitim programları, güncel bilgiye sahip eğitimciler, doğru programlama metotları, araçları, dilleri ile müfredat hazırlamaktan geçiyor üniversite ayağında. Pascal/Fortran/C bunlar çok güzel diller, halen kullanım alanları da var ama piyasada ne kadar geçerliler, ne amaçla kulanacak bunları mezun olan öğrenci? Algoritma öğrensin çocuk diyorsanız Java/C++/C# ile de bal gibi öğrenir. Fortran ile öğretince çocuğun aklında ne kalıyor, kocaman bir hiç. Pratik yapamayacağı, en basitinden evde gidip kişisel web sitesinin altyapısını programlayamayacağı veya kendi mobil uygulamasını yazamayacağı dili öğretirsen öğrenciye, programlamaya soğuk bakar, unutur gider. Tabi Fortran ile C++ karşılaştırınca elma ile armut oldu ama temelde söylemek istediğimi anlatabildim sanırım. 

 

Yazılım piyasası herşeye rağmen halen çok parlak ve doyuma ulaşmaktan çok uzak. Halen çok insan kaynağı açığı var. Yeter ki kalite artırılsın, bilgi dağarcığımız modern dünya seviyelerine yaklaşsın. Uzun lafın kısası, "Bizden olmaz" değil bence, bal gibi de olur :)

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Selam arkadaslar bir yere bir program yapacagim tabi parayi alabilmek adina iki ay sonunda programi kitleyecek bir sisteme ihtiyacim var daha nasil bir seyler yapilabilir ? platform vb.net2008 olacak

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Ben de Ankara'da küçük bir firma ortağıyım, yasal bir ortaklık değil ama pratikte ortak olarak çalışıyorum.

 

10 kişilik bir ekibimiz var, Java ve .Net ile kurumsal yazılımlar üretiyoruz, ARGE projelerimiz de var. Ben Java ile uygulama geliştiren ekibin başındayım. Bilgisayar Mühendisliği mezunu olmadığım için teorik bilgide eksiklerim var ama web tabanlı uygulama geliştirmede 11 yıllık tecrübem ve bu amaçla geliştirdiğim kod üretici yazılımlar sayesinde "uzmanım" diyebilirim.

 

Sektörün düzeleceğine inancım yok denecek kadar az. Kar oranları çok düşük, eğer arkanızda bir holding, hükümet, cemaat falan yoksa sektörde bırakın zengin olmayı, para kazanmak bile çok zor. Son 2-3 yıldır kazandığımız paralar gülünecek düzeyde. İşi yapıyoruz, bitiriyoruz ama para alamıyoruz. (Kamu) Ya da ihaleye hazırlanıyoruz, bizim 10 lira maliyet hesapladığımız projeyi x firması 1 lira teklifle alıyor. Sonra batırıp bırakıyorlar... Veya bir şekilde o paralar pay ediliyor, proje yapılmadan kabuller alınıyor vs.

 

Şu ana kadar aldığımız tüm işleri bitirdik ve teslim ettik ancak yaptığımız işin kalitesine çok da fazla inanmıyorum. Çünkü aynen söylendiği gibi tamamen en kısa sürede şartname maddelerini karşılamak üzerine kurulu bir esasla çalışıyoruz. Analiz-tasarım; geliştirme ve test süreçlerini belli standartlar ve kabul edilen en iyi pratikler dahilinde uygulamak istiyoruz ama kaynak ve süre yetersizliği nedeniyle hep eksik kalıyor. Bu da hep kısır döngüde kalmamıza neden oluyor.

 

Neyse, şimdilik vaktim kısıtlı, sıkıntıları çok kısa yazdım... Zaman buldukça detaylandırmaya çalışırım.

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Başlığı hortlatmak gibi olacak ama bahsi geçen micro-orm' nin java implementasyonunu da tamamladım. Ek olarak .Net ve Java için ufak birer rehber hazıladım, dileyen arkadaşlar deneyebilir;

 

Kaynak Kodlar;
.Net;
https://github.com/ionixNet
Java;
https://github.com/ionixJava
 

Kaynak kodların derlenmiş halleri;

.Net;
https://drive.google.com/file/d/0BwknnP77KksuZUJVOVFWZ016VmM/view?usp=sharing

Java;
https://drive.google.com/file/d/0BwknnP77KksuYUxKZS02allaYjQ/view?usp=sharing

 

Veritabanı olarak ünlü Northwind kullanıldı. .Net örneğinde Sql Server, Java için Oracle Kullanılıyor

 

Kullanırken;

.Net;

 

 

Model Sınıfımız;

    [Table("Products")]
    public class Products
    {
        [DbSchema(IsNullable = false, IsKey = true, DatabaseGeneratedOption = ionix.Data.StoreGeneratedPattern.Identity)]
        public int ProductID { get; set; }

        [DbSchema(IsNullable = false, MaxLength = 40)]
        public string ProductName { get; set; }

        [DbSchema(IsNullable = true)]
        public int? SupplierID { get; set; }

        [DbSchema(IsNullable = true)]
        public int? CategoryID { get; set; }

        [DbSchema(IsNullable = true, MaxLength = 20)]
        public string QuantityPerUnit { get; set; }

        [DbSchema(IsNullable = true)]
        public decimal? UnitPrice { get; set; }


        [DbSchema(IsNullable = true, DefaultValue = "0")]
        public short? UnitsInStock { get; set; }

        [DbSchema(IsNullable = true, DefaultValue = "0")]
        public short? UnitsOnOrder { get; set; }

        [DbSchema(IsNullable = true, DefaultValue = "0")]
        public short? ReorderLevel { get; set; }

        [DbSchema(IsNullable = false, DefaultValue = "0")]
        public bool Discontinued { get; set; }
    }

Factory Nesnemiz;

    public static class ionixFactory
    {
        private static readonly string ConnetionString = "Data Source=192.168.204.128;Initial Catalog=NORTHWND;User Id=sa;Password=1;";

        public static DbConnection CreateEmptyConnection()
        {
            return new SqlConnection();
        }

        public static DbConnection CreateDbConnection()
        {
            DbConnection conn = CreateEmptyConnection();
            conn.ConnectionString = ConnetionString;
            conn.Open();

            return conn;
        }

        public static IDbAccess CreatDataAccess(DbConnection connection)
        {
            DbAccess dataAccess = new DbAccess(connection);
            dataAccess.ExecuteSqlComplete += (e) =>
            {
               try
                {
                    //Sql Sorgularını loglamak veya görüntülemek için aşağıdaki kodları aktif hale getirin.
                    //string path = e.Succeeded ? "x:\\sql.txt" : "x:\\sqlHata.txt";
                    //using (Stream fs = new FileStream(path, FileMode.Append, FileAccess.Write))
                    //{
                    //    using (StreamWriter sw = new StreamWriter(fs))
                    //    {
                    //        if (e.Query != null)
                    //        {
                    //            sw.WriteLine(e.Query.ToParameterlessQuery());
                    //            sw.WriteLine();
                    //        }
                    //    }
                    //}
                }
                catch { }
            };

            return dataAccess;
        }

        public static IDbAccess CreatDataAccess()
        {
            return CreatDataAccess(CreateDbConnection());
        }

        public static ITransactionalDbAccess CreateTransactionalDataAccess()
        {
            TransactionalDbAccess dataAccess = new TransactionalDbAccess(CreateDbConnection());

#if DEBUG
            dataAccess.ExecuteSqlComplete += (e) =>
            {
                try
                {
                    //string path = e.Succeeded ? "x:\\sql.txt" : "x:\\sqlHata.txt";
                    //using (Stream fs = new FileStream(path, FileMode.Append, FileAccess.Write))
                    //{
                    //    using (StreamWriter sw = new StreamWriter(fs))
                    //    {
                    //        if (e.Query != null)
                    //        {
                    //            sw.WriteLine(e.Query.ToParameterlessQuery());
                    //            sw.WriteLine();
                    //        }
                    //    }
                    //}
                }
                catch { }
            };
#endif
            return dataAccess;
        }

        public static ICommandFactory CreateFactory(IDbAccess dataAccess)
        {
            return new CommandFactory(dataAccess);
        }

        public static ICommandAdapter CreateCommand(IDbAccess dataAccess)
        {
            return new CommandAdapter(CreateFactory(dataAccess), CreateEntityMetaDataProvider);
        }

        public static IRepository<TEntity> CreateRepository<TEntity>(IDbAccess dataAccess)
            where TEntity : class ,new()
        {
            return new Repository<TEntity>(CreateCommand(dataAccess));
        }

        public static IEntityMetaDataProvider CreateEntityMetaDataProvider()
        {
            return new DbSchemaMetaDataProvider();
        }
    }

Uygulamadaki örneği;

            using (IDbAccess dataAccess = ionixFactory.CreatDataAccess())
            {
                IRepository<Products> rep = ionixFactory.CreateRepository<Products>(dataAccess);
                Products entity = rep.SelectById(1);
                entity.ProductName = "Chai Değişti";
                rep.Upsert(entity);

                IList<Products> entityList = rep.Query("select top 3 * from products ".ToQuery());
                rep.BatchInsert(entityList);

            }

 

 

 

 

Java;

 


Model Sınıfımız;

import ionix.Annotation.DbSchema;
import ionix.Annotation.Table;
import ionix.Data.StoreGeneratedPattern;
import java.math.BigDecimal;


@Table(name="PRODUCTS")
public class Products {
    @DbSchema(columnName = "PRODUCTID", isKey = true,databaseGeneratedOption = StoreGeneratedPattern.AutoGenerateSequence)
    private int productId;
    public int getProductId(){ return this.productId;}
    public Products setgetProductId(int value){
        this.productId = value;
        return this;
    }


    @DbSchema(columnName = "PRODUCTNAME")
    private String productName;
    public String getProductName(){ return this.productName;}
    public Products setProductName(String value){
        this.productName = value;
        return this;
    }

    @DbSchema(columnName = "SUPPLIERID")
    private int supplierId;
    public int getSupplierId(){ return this.supplierId;}
    public Products setSupplierId(int value){
        this.supplierId = value;
        return this;
    }

    @DbSchema(columnName = "CATEGORYID")
    private int categoryId;
    public int  getCategoryId(){
        return this.categoryId;
    }
    public Products setCategoryId(int  value){
        this.categoryId = value;
        return this;
    }

    @DbSchema(columnName = "QUANTITYPERUNIT")
    private String quantityPerUnit;
    public String getQuantityPerUnit(){ return this.quantityPerUnit;}
    public Products setQuantityPerUnit(String value){
        this.quantityPerUnit = value;
        return this;
    }

    @DbSchema(columnName = "UNITPRICE")
    private BigDecimal unitPrice;
    public BigDecimal getUnitPrice(){
        return this.unitPrice;
    }
    public Products setUnitPrice(BigDecimal  value){
        this.unitPrice = value;
        return this;
    


    @DbSchema(columnName = "UNITSINSTOCK")
    private int unitsInStock;
    public int getUnitsInStock(){ return this.unitsInStock;}
    public Products setUnitsInStock(int value){
        this.unitsInStock = value;
        return this;
    }

    @DbSchema(columnName = "UNITSONORDER")
    private int unitsInOrder;
    public int getUnitsInOrder(){ return this.unitsInOrder;}
    public Products setUnitsInOrder(int value){
        this.unitsInOrder = value;
        return this;
    }

    @DbSchema(columnName = "REORDERLEVEL")
    private int reorderLevel;
    public int getReorderLevel(){ return this.reorderLevel;}
    public Products setReorderLevel(int value){
        this.reorderLevel = value;
        return this;
    }

    @DbSchema(columnName = "DISCONTINUED")
    private int discontinued;
    public int getDiscontinued(){ return this.discontinued;}
    public Products setDiscontinued(int value){
        this.discontinued = value;
        return this;
    }
}

Factory Nesnemiz;

import ionix.Data.*;
import ionix.Data.DbAccess;
import ionix.Data.Oracle.CommandFactory;
import ionix.Data.SqlQueryHelper;
import ionix.Data.TransactionalDbAccess;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public final class ionixFactory {
    public static Connection createConnection() {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@DB:1521:ORCL", "NORTHWND", "1");
            return conn;
        } catch (ClassNotFoundException ex) {
            throw new RuntimeException(ex);
        } catch (SQLException ex) {
            throw new RuntimeException(ex);
        }
    }

    public static DbAccess creatDataAccess(Connection connection) {
        DbAccess dataAccess = new DbAccess(connection);
        dataAccess.onExecuteSqlComplete((e) ->
                System.out.println(SqlQueryHelper.toParameterlessQuery(e.getQuery()))
        );

        return dataAccess;
    }

    public static DbAccess creatDataAccess() {
        return creatDataAccess(createConnection());
    }

    public static TransactionalDbAccess createTransactionalDbAccess() {
        TransactionalDbAccess dataAccess = new TransactionalDbAccess(createConnection());
        dataAccess.onExecuteSqlComplete((e) ->
                System.out.println(SqlQueryHelper.toParameterlessQuery(e.getQuery()))
        );
        return dataAccess;
    }

    public static CommandFactory CreateFactory(DbAccess dataAccess) {
        return new CommandFactory(dataAccess);
    }

    public static CommandAdapter createCommand(DbAccess dataAccess) {
        return new CommandAdapter(CreateFactory(dataAccess), createEntityMetaDataProvider());
    }

    public static <TEntity> Repository<TEntity> createRepository(Class<TEntity> cls, DbAccess dataAccess){
        return new Repository<TEntity>(cls, createCommand(dataAccess));
    }

    public static EntityMetaDataProvider createEntityMetaDataProvider() {
        return new DbSchemaMetaDataProvider();
    }
}

Uygulamadaki örneği;

        try(TransactionalDbAccess dataAccess = ionixFactory.createTransactionalDbAccess())
        {
            Repository<Products> rep = ionixFactory.createRepository(Products.class, dataAccess);
            Products entity = rep.selectById(1);
            entity.setProductName("Chai değişti");
            rep.update(entity);

            List<Products> entityList = rep.query("select * from products where rownum <= 3");
            rep.batchInsert(entityList);
            dataAccess.commit();
        }
OnLyTNT beğendi

Bu mesajı paylaş


Bu mesajın linki
Sosyal ağlarda paylaş

Yorum yazmak için üye olun veya giriş yapın

Yorum yazmak için üye olmanız lazım

Üye ol

Üye olun ve sitemizin tüm avantajlarından yararlanın!


Yeni bir hesap oluştur

Giriş yap

Zaten üyemiz misin? O halde giriş yap


Hemen giriş yap
0

  • Bu sayfadaki üyeler   0 üye

    Şu an bu sayfayı görüntüleyen bir üye yok