none
Mvc'de süre bitince aktifMi=false olsun istiyorum. RRS feed

  • Soru

  • Arkadaşlar mvc'de ilan alıyorum örneğin kullanıcı ilanı 4 haftalık seçiyor.4 haftalık süre bitince sistem aktifmi'sini false yapsın.

    Bunu nasıl yapabilirim.

    28 Aralık 2015 Pazartesi 13:12

Yanıtlar

  • Bu tip yöntemlerin peşinden tutarsız veritabanları gelir.

    İlana bitiş tarihi eklersin, arayüzden 4 haftalık seçtiğinde o tarihi 4 hafta sonra olarak kaydedersin. Aktiflik kontrolünüde AND yaparak kurarsın.

    Ha illa böyle bir şey yapacaksan da 4 hafta bittiğinde değil, o ilan açıldığında tarihlerini kontrol edersin duruma göre değiştirirsin ama burada da transaction dır isolation dır concurrencydir dikkat etmen gerekir. Zaten yapma!

    • Yanıt Olarak Öneren Soner KOYLU 29 Aralık 2015 Salı 06:18
    • Yanıt Olarak İşaretleyen Serkan Canseven 30 Aralık 2015 Çarşamba 07:37
    28 Aralık 2015 Pazartesi 13:52
    Moderatör
  • SQL Serverda bir JOB yaparak bitiş tarihi gelenleri veritabanından Pasif konuma alabilirsini....


    bence de olması gereken kod kısmında değil veritabanı kısmında çözmen olayı

    Bu soruya daha yanıt vermeyecektim ama bu cevaplara istinaden bir şeyler yazmak gerekiyordu. İster sadece çalışan kod yazın ister iyi çalışan kod yazın. Keyif sizin. 

    Web de yazılım ile ilgili araştırmalar yapacak olursanız çeşitli prensipler ve best practicesler ile karşılaşacaksınız.

    Öncelikle ne denir? Her bir parça sadece tek iş yapmalıdır. Sen gider db de veriyi değiştirecek bir şeyler yapmaya başlarsan, iş/veri katmanında yer alması gereken bir sınıfın işini db ye yüklemiş olursun.

    Sonrasında gereksiz yere kod yazılmaması salık verilir. Bu yapılan iş db de bir kolon değişikliğine gidilmesini gerektiren bir iş değil. Sen eğer bir O/RM yapmışsan kolon-property eşleştirmesi sırasında ufak bir kural eklersin çözülür gider.


    Verinin - İş ile tutarlı olması durumu. Bir gün belki db de toplu işlem yapman gerekti veya job'un çalışmadı. Veya ilan tam job çalıştıktan sonra eklendi... Bu gibi durumlar veritabanındaki bilginin, iş ile uyuşmamasına sebebiyet verir.

    Bir de bakım gerektirecek şeyleri azaltmaktan bahsederler. 1 tane property için job açmak... O job'un sağlının kontrolü ne olacak? Hata durumlarında yaşanacak hafiyelik işin ektrası.


    Bir de bağımlılık muhabbeti var da buralarda bunu pek takan yazılımcı görmediğim için kasmayacağım :) (özetle bu yazılım artık bu db ye muhtaç)



    29 Aralık 2015 Salı 08:13
    Moderatör
  • Bu kadar basit bir algoritma için konu bile açılmış olması , tartışılıyor olması bile gülünç. İlan tablona tarih neden kaydediyorsun: yayın süresini hesaplamak için. Elinde bu veri varken gidipte job yapmak, aktifmi gibi bir alanı set etmek gibi uyduruk işlere gerek olmazki. 

    DateTime.Today < ilanTarihi.AddWeeks(4)

    sana ilan süresi dolmamış olanları filtreler zaten. Cihan bunu yazmış ama anlayan bi Soner olmuş galiba.


    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    29 Aralık 2015 Salı 08:15
    Moderatör

Tüm Yanıtlar

  • Bu tip yöntemlerin peşinden tutarsız veritabanları gelir.

    İlana bitiş tarihi eklersin, arayüzden 4 haftalık seçtiğinde o tarihi 4 hafta sonra olarak kaydedersin. Aktiflik kontrolünüde AND yaparak kurarsın.

    Ha illa böyle bir şey yapacaksan da 4 hafta bittiğinde değil, o ilan açıldığında tarihlerini kontrol edersin duruma göre değiştirirsin ama burada da transaction dır isolation dır concurrencydir dikkat etmen gerekir. Zaten yapma!

    • Yanıt Olarak Öneren Soner KOYLU 29 Aralık 2015 Salı 06:18
    • Yanıt Olarak İşaretleyen Serkan Canseven 30 Aralık 2015 Çarşamba 07:37
    28 Aralık 2015 Pazartesi 13:52
    Moderatör
  • Peki ne önerirsin yapmamaktan öte.Böyle bir kontrol illaki olacak gerek bana bilgi verecek kritik ilan gibi bitmeye yakındır tarzında.Bunu nasıl kurardın sen olsan?
    28 Aralık 2015 Pazartesi 14:48
  • Bu tip yöntemlerin peşinden tutarsız veritabanları gelir.

    İlana bitiş tarihi eklersin, arayüzden 4 haftalık seçtiğinde o tarihi 4 hafta sonra olarak kaydedersin. Aktiflik kontrolünüde AND yaparak kurarsın.

    Ha illa böyle bir şey yapacaksan da 4 hafta bittiğinde değil, o ilan açıldığında tarihlerini kontrol edersin duruma göre değiştirirsin ama burada da transaction dır isolation dır concurrencydir dikkat etmen gerekir. Zaten yapma!



    Ben şöyle düşündüm dropdownlistFor içine 4 adet değer tanımladım.Bunlar 1 hafta,2 Hafta,3 Hafta,4 Hafta diye veri tabanı'na hangisini seçersem onu kaydedecek.İstediğim seçilen tarih süresi ilan süresinden büyükse aktif mi kısmını false yapsın ve ilanı kaldırsın.İşte bitmeden 2 gün önceden admin kısma uyarı atsın vs bunlar sonradan yapılacak işler. Aslında düşündüğüm şekil mantıklı geliyor ama kodları tam olarak nereye oturtacağım onu bulamadım.
    28 Aralık 2015 Pazartesi 15:05
  • Merhaba ,

    Bu işlem için şöyle bir çözüm yapılabilir. 

    SQL Serverda bir JOB yaparak bitiş tarihi gelenleri veritabanından Pasif konuma alabilirsiniz.  Mesela ben olsam şu şekilde yapardım. (bool)IsActive ,(DateTime) EndDate  çalıştırdığınız bu job günlük haftalık aylık yıllık v.s hiç fark etmez. Veritabanından tarihi geçmiş olanları pasif konuma getirir. Bu sayede UI ile alakasını kesmiş olursunuz ve veritabanında tüm işler çözülmüş olur. Veritabanına sorgu yaptığınızda o kayıtların gelmeyeceğini garanti altına almış olursunuz.


    MSDN - Forum

    29 Aralık 2015 Salı 00:18
  • bence de olması gereken kod kısmında değil veritabanı kısmında çözmen olayı . tablonda ilan başlangıç tarihi ve aralık süresini tutarsın misal 4 hafta 28 güne denk gelir. başlangıc+28= datetime now dan büyük oluyorsa ilanın aktif özelliğini false yaparsın . sadece kod kısmında ise grid vs nerdeyse ilan tarihi bitimine yaklaşanları listelemen sana kafi bu da bilgi amaçlı olur. süresi bitenleride bir sorgu ile db den farklı bir alanında getirebilirsin bunuda ilan açılış tarihini büyükten ve durumu false olanları dersin iş tamam 
    29 Aralık 2015 Salı 07:32
  • Merhaba ,

    Bu işlem için şöyle bir çözüm yapılabilir. 

    SQL Serverda bir JOB yaparak bitiş tarihi gelenleri veritabanından Pasif konuma alabilirsiniz.  Mesela ben olsam şu şekilde yapardım. (bool)IsActive ,(DateTime) EndDate  çalıştırdığınız bu job günlük haftalık aylık yıllık v.s hiç fark etmez. Veritabanından tarihi geçmiş olanları pasif konuma getirir. Bu sayede UI ile alakasını kesmiş olursunuz ve veritabanında tüm işler çözülmüş olur. Veritabanına sorgu yaptığınızda o kayıtların gelmeyeceğini garanti altına almış olursunuz.


    MSDN - Forum

    JOB'a falan gerek yok. Aktif'e de gerek yok. Eğer kullanıcı elle iptal ederse diye Aktif kullanılmalı. Yoksa Bitiş Tarihi kullansın diye Cihan bey söylemiş zaten.

    Daha önce de tartışıldı. Ve Çetin abi de her yıl kimliğine yaşını bilmek için bir çizik mi atıyorsun diye sormuştu.


    Mail Blog Web Site

    29 Aralık 2015 Salı 07:44
  • SQL Serverda bir JOB yaparak bitiş tarihi gelenleri veritabanından Pasif konuma alabilirsini....


    bence de olması gereken kod kısmında değil veritabanı kısmında çözmen olayı

    Bu soruya daha yanıt vermeyecektim ama bu cevaplara istinaden bir şeyler yazmak gerekiyordu. İster sadece çalışan kod yazın ister iyi çalışan kod yazın. Keyif sizin. 

    Web de yazılım ile ilgili araştırmalar yapacak olursanız çeşitli prensipler ve best practicesler ile karşılaşacaksınız.

    Öncelikle ne denir? Her bir parça sadece tek iş yapmalıdır. Sen gider db de veriyi değiştirecek bir şeyler yapmaya başlarsan, iş/veri katmanında yer alması gereken bir sınıfın işini db ye yüklemiş olursun.

    Sonrasında gereksiz yere kod yazılmaması salık verilir. Bu yapılan iş db de bir kolon değişikliğine gidilmesini gerektiren bir iş değil. Sen eğer bir O/RM yapmışsan kolon-property eşleştirmesi sırasında ufak bir kural eklersin çözülür gider.


    Verinin - İş ile tutarlı olması durumu. Bir gün belki db de toplu işlem yapman gerekti veya job'un çalışmadı. Veya ilan tam job çalıştıktan sonra eklendi... Bu gibi durumlar veritabanındaki bilginin, iş ile uyuşmamasına sebebiyet verir.

    Bir de bakım gerektirecek şeyleri azaltmaktan bahsederler. 1 tane property için job açmak... O job'un sağlının kontrolü ne olacak? Hata durumlarında yaşanacak hafiyelik işin ektrası.


    Bir de bağımlılık muhabbeti var da buralarda bunu pek takan yazılımcı görmediğim için kasmayacağım :) (özetle bu yazılım artık bu db ye muhtaç)



    29 Aralık 2015 Salı 08:13
    Moderatör
  • Bu kadar basit bir algoritma için konu bile açılmış olması , tartışılıyor olması bile gülünç. İlan tablona tarih neden kaydediyorsun: yayın süresini hesaplamak için. Elinde bu veri varken gidipte job yapmak, aktifmi gibi bir alanı set etmek gibi uyduruk işlere gerek olmazki. 

    DateTime.Today < ilanTarihi.AddWeeks(4)

    sana ilan süresi dolmamış olanları filtreler zaten. Cihan bunu yazmış ama anlayan bi Soner olmuş galiba.


    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    29 Aralık 2015 Salı 08:15
    Moderatör
  • Bu kadar basit bir algoritma için konu bile açılmış olması , tartışılıyor olması bile gülünç. İlan tablona tarih neden kaydediyorsun: yayın süresini hesaplamak için. Elinde bu veri varken gidipte job yapmak, aktifmi gibi bir alanı set etmek gibi uyduruk işlere gerek olmazki. 

    DateTime.Today < ilanTarihi.AddWeeks(4)

    sana ilan süresi dolmamış olanları filtreler zaten. Cihan bunu yazmış ama anlayan bi Soner olmuş galiba.


    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com


    Hocam ama soruya bakınca tabloda bir alanı güncellemeden kastediyor o yüzden farklı yorumlar veriliyor,

     haftalık süre bitince sistem aktifmi'sini false yapsın.

    şeklinde demek başka

    süre zarfı dolmuş olanları göstermesin demek farklı

    birde sistem yapsın belirtmesi var hocam

    :) o yüzden herkes farklı telden çalıyor :)

    29 Aralık 2015 Salı 13:57
  • Şimdi olay yazılım geliştirme veya veritabanı tasarımı ile ilgili olmasaydı. Eski düzen A4 kağıdına yazılmış aşağıdaki gibi bir belge verilmiş olsaydı. Web sitesindeki ilan değil de. Duvarlara, duraklara asılan ilanlardan olduğunu düşün. Bu ilanların yayından kalkacağı günü nasıl hesaplardık

          Id         Baslik                        İlanTarihi           YayındaKalacağıGün

        245     Bilmem ne firması      30.12.2015              15

    30 aralık tarihinden itibaren 15 gün saymaz mıydık? Diğer konu günün tarihi 05.01.2016 oldu. Dediler ki süresi dolan ilanları kontrol edin varsa yayından kaldırın. O zaman ne yapacaktık. A4 üzerinde yayından kalkış tarihi yok diye sonsuza kadar ilanlar yayında mı kalacak?Mesela tarih 5 Ocak ise ilanın 7. günü demektir ilan 15 gün yayında kalacağına göre yayından kaldırılmayacak diye düşünmez miydik? Yani iki tarih arasındaki gün farkını hesaplamaz mıydık? Aslında olay bu kadar kolay. Basit bir matematik işlemi için bu kadar kafa patlatmaya gerek yok. 100000(Yüzbin) ilan olsa hepsi için Job/Timer/... veya artık adı ne olursa bunları yapmaya gerek var mı?


    Her şeyi denediğin halde yapamadıysan henüz denemediğin şeyler var demektir.


    29 Aralık 2015 Salı 14:15