Рефакторінг сайта IMK.
Наразі мені попав ASP.NET сайтік IMK, у якому вже багато чого нормально не працювало та меня попрохали його підремонтувати та трошки довести до нормального стану. Взагалі це моя звичайна фрілансерска робота. Але спочатку декілька слів, як цей сайтік побудований.
- EntityFramework
- OpenXml - Excel framework
- Wow photoSlider
- Highlighting Menu and Sortable tables (WebMethod)
- URL Rewriting and Sitemap
- SMS gateway
- AJAX and WebMethod handers
- Pages without CodeBehind
- Eval Binding and ItemDataBound inside Control
- Control Event Handling
- FancyBox PopUp
- FCKEditor (text formatter)
- CKFinder (client processing image)
- MiniProfiler and Glimpse Profilers
- IpGeoBase adaptive price
- Liqpay payment gateway
- Repeat SendMail with timer
Незважаючи на те, що сайтік нібито незграбний та непомітний, він був зроблений на високому технічному рівні, але з різних причин деякі компоненти з часом працювати нормально перестали. Ось перелік деяких технологій/компонентів, які були використані у цьому сайті:
EntityFramework
, якщо ви еще не стикалися з цим фреймворком, то я маю опис для початківців з чотирьох частин - Entity Framework missing FAQ (Part 1), (Part 2), (Part 3), (Part 4)
У сайта присутній увесь фреймворк для роботи з Excel, при чому не спрощений, як наприклад у цьому моєму проєкті - Cайтік з web-сервісом, спеціфічним membership-провайдером та даними Excel, та не якийсь дурний Desktop'ний фреймворк Шаблон кода для роботи з MS Excel, а все зроблено дуже якісно та у повному варіанті за допомогою DocumentFormat.OpenXml, що дозволяло завантажувати Excel-файли, та формувати будь-які Excel-звіти.
У сайта присутній Wow photoSlider, нажаль адмінка його не працювала і мені прийшлося її ремонтувати. До речі, зверніть увагу що фотослайдер інтегрований як у ASP (або у ASP.NET MVC).
- У сайта було досить багато різноманітних приємних дрібниць - таких я підсвічування меню та можливість пересортувати будь-які табли за допомогою реквестів до ASP.NET Classic WebMethod.
Дізнатися більше про WebMethod's How classic ASP.NET programmers has realized WEB.API since 2005 year.
У сайта був присутній URL Rewriting та Sitemap
Дізнатися більше про URL Rewriting ASP.NET URL rewriting.
- Сайт має SMS-шлюз до https://sms-fly.ua/, як не дивно, добре працюючий, навіть з точним балансом залишка сплачених SMS.
- Сайт написан на WebMethod / Ajax, тобто у 42-х випадках замість ASP.NET Classic постбеку використовується звернення до ВебСервісів, безпосередньо вбудованих у сторінку. Я також дуже полюбляю цей метод, та часто його використовую - How classic ASP.NET programmers has realized WEB.API since 2005 year, SPA-page на Classic ASP.NET та jQuery..
- Приємно, що усі дії юзера підтверджуються PopUp на базі FancyBox таким чином:
All text in this project is edition with formation by FCKEditor
Сайт має клієнтську та серверну обробку фото, на клієнті використовується CKFinder, Я маю власну бібліотеку аналогічного призначення - Cropper світлин сайту., але здається опис я так і не зробив Зовнішний інтерфейс фото-движка для ASP.NET, AJAX та Web-сервісів.
Сайт має аж два профайлера однакового призначення Glimpse та MiniProfiler
Саме функціонал електронного магазина зроблений непогано. Сайт має можливість повного коректування усіх меню, категорій товарів та текстів сторінок, але зроблено це якось дуже важко і дуже багато кода, я теж взагалі завжди так роблю, але це робиться просто, літерал на сторінці замінується даними з бази, це десять стрічок коду, тут щось накручено у тисячи стрічок коду.
Цени теж сайт показує хитро, спочатку визначає місто України, потім дає необхідну націнку. Взагалі це дуже розповсюджена технологія спочатку аналізувати IP, а лише потім показувати прайс, ось опис ще одного мойого сайту з використанням GeoBase Landing page with adaptive design and country recognizing from database.
Нажаль сайт не виконував свої головні функції, тобто у нього не працював платіжний шлюз до ПриватБанку - https://www.liqpay.ua/ - і це було одним з головних причин, чому він попав до мене. Тобто замість правильного лінка під кнопкою "сплатити" для подальшого перехода на банк у сайта з'являлося лише ErrorLink. Це взагалі було зза індуського методу програмування сайту, коли обробляється лише одна гілка IF, а друга, якщо якась вимога не витримується не кодується взагалі, ніякої помилки не формується. Тому увесь цей платіжний шлюз мені пройшлося переробити нормально.
Ще трохи про мої платежні шлюзи Payment Gateway до системи Paymaster на VB.NET, My payment gateway for Inplat.ru.
- Проблема з платіжним шлюзом не дозволяла сайту виконувати свою головну функцію - торговельну, але сайт побудований таким чином, що у нього не з'являється кнопка "сплатити" безпосередньо на формі, ця кнопка приходить на мило, щоб менеджер сайту мав можливість підкорректувати суму (з урахуванням знижки наприклад). А з милом була просто безліч проблем.
Перша проблема була в том, що сайт висів на домені IN.UA, який взагалі знаходиться у спамі, тому мило з цього спам-домена взагалі нікуди не ходило.
Тому мої попередники у цьому проєкті вирішили це таким чином - усе мило у копії відправлялося на yandex (чому на yandex? мабуть це були якийсь прихильники "руського миру") - а вже з Лубянки мило редіректілося замовникам.
Але й у цьому вигляді пошта, коли сайт попав до мене, вже не працювала, тобто взагалі не натискалася кнопка "відправити пошту", але потім, несподівано на сотий раз, раз - й спрацює, й на Яндекс улітає непрацюючий ErrorLink. Я почав розбиратися з цією проблемою, та побачив по перше звичайний індуський код, у якому відпрацьовувалися лише одна гілка IF, а у ELSE ніяких мессаджей на форму не видавалося. Ніяких TRY у коді відправки мила теж ніде не було.
Також я звернув увагу, що засоби відправки мила багаторазово перероблялися. Спочатку життя сайту мило відправлялося звичайним чином через SmtpClient до smtpout.secureserver.net, до того ж я знайшов багато різного коду відправки мила навіть через smtpout.secureserver.net.
Потім була додана надбудова, яка відправляла мило повторно через кожні 30 хвилин, поки не буде мессаджа про доставку.
І остання доработка була - винести реквести на відправку у браузер, який звертається до вебсервісів.
І лише після цієї доработки все зламалося остаточно і працювати перестало остаточно.
Вибачайте, мені вже набридло перераховувати, що саме у цьому сайті не працювало. Наприклад, не працював бекап бази. Тобто, можливо колись цей сайт лежав на VDS, тоді взагалі цей шлях можливий.
Але коли сайт попав до мене, він лежав на SHARED-хостингі, тобто веб-сервер був на одному кінці світа, база на іншому, на колективному SQL-сервері , що собі люди думали, як взагалі це може працювати?
Тому для бекапа я зробив деякий клон ось цієї своєї програми - DataBase dumper on Classic ASP.NET with serialize DB to .CSV and using ICSharpCode.SharpZipLib
Цей сайт взагалі зроблений як скажений мікс технологій, деякі сторінки зроблені на VB
Деякі сторінки зроблені у сінтаксісу Razor, тобто без Code Behind.
Сайт використовує більше 500 ASP.NET контролів, у значної кількості вони прибіндені безпосередньо на сторінках, але іноді й зроблено так, як роблю я зазвичай, біндінг у RowDataBound та обробка постбеков на сторінці, наприклад ItemDataBound на оцієї сторінці - Як будуються адаптивні сайти для мобільників та десктопів на CLASSIC ASP.NET.
Я взагалі помічаю обмеженість поглядів Шарперів на ASP.NET Classic, у них чомусь Code Behind на сторінках майже завжди пустий. Можливо це пов'язано з тим, що навіть найновітніша студія VS2017 так і не підтримує повністю C# так як VB. Тобто евенти можна задати тільки на сторінках, ось так. Але коли я працюю з бейсіком, у мене у цьому комбобоксі на сторінці будуть розкриватися усі контроли, а не тільки саме сторінка, відповідно до кожного контрола будуть розкриватися усі можливи евенти, як зазвичай це робиться для десктопних программ. Але так підтримується ASP.NET лише для VB, для C# у ASP.NET такої підтримки немає.
|