Last active
August 16, 2018 13:41
-
-
Save arxipovdev/2ccd87878418f063579d9c965e14ead3 to your computer and use it in GitHub Desktop.
Revisions
-
arxipovdev revised this gist
Aug 16, 2018 . 1 changed file with 2 additions and 4 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -37,10 +37,8 @@ public Bid GetBid(){...} ###### пример ``` C# // хорошо $"добавлен 1C-пользователь {user.surname} {user.name} id:{user.id}" // плохо str.AppendFormat("<div class='col-lg-9 divTextBid'>{0}</div>", myReader["countAdult"].ToString()); -
arxipovdev renamed this gist
Aug 16, 2018 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
arxipovdev created this gist
Aug 16, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,170 @@ ## C# ### Класс 1. все классы, члены класса именуются PascalCasing; 2. у класса должен быть комментарий и все его члены должны быть прокомментированны; 3. должен быть namespace; 4. имя класса в единственном числе; 5. класс должен быть описан в отдельном файле; 6. если конструктор используется по умолчанию, то дефолтный который создает IDE удалять; 7. не выдумывать имя свойства для Cправочника, например назвать поле Name, а не CountryName или type_name 8. не выдумывать имена основных методов(CRUD) см.пример, использовать: - Get() - GetById(id) - Update() - Create() - Delete() 9. в свойствах не должно быть получение других классов, а получать через методы ###### пример ``` C# // хорошо public bool IsDelete => DeleteUserID != null; // плохо public string office { get => dic_company_users_office.GetDefaultOfficeUser(id)._officeName; } // хорошо public Bid GetBid(){...} ``` 10. не создовать в модели лишние методы которые получают определенные поля или обновляют какое то определенное поле, например не писать так GetUserName(), UpdateFio() 11. поля(внешние ключи) писать например CountryID, UserID, ClientID, а не country_id, IdUser._ ### Общее - Использовать Dapper для работы с БД. - Для справочника должны быть поля статус, дата создания, кто создал, дата удаления, кто удалил. Данные из БД не удалять. - В модели не должно быть методов с формированием разметки HTML - Должна быть обрабатыка ошибок(try|catch) и логирование - Интерполяция строк, использовать $@"". ###### пример ``` C# // хорошо var text = $@"<p>Здравствуйте, {user.userName}</p> <p>Ваши данные для авторизации:</p> <p>Логин: {user.email}</p> <p>Пароль: {user.password}</p>" // плохо str.AppendFormat("<div class='col-lg-9 divTextBid'>{0}</div>", myReader["countAdult"].ToString()); ``` ###### Пример ``` C# namespace Itrips.Models { /// <summary> /// Вид тура /// </summary> [Table("TypeTours")] public class TypeTour { /// <summary> /// ID /// </summary> [Key] public int ID { get; set; } /// <summary> /// Название /// </summary> public string Name { get; set; } /// <summary> /// Статус /// </summary> public bool IsActivity { get; set; } = true; /// <summary> /// Кто создал /// </summary> public Guid CreateUserID { get; set; } /// <summary> /// Дата создания /// </summary> public DateTime DateAdd { get; set; } /// <summary> /// Кто удалил /// </summary> public Guid? DeleteUserID { get; set; } /// <summary> /// Дата удаления /// </summary> public DateTime? DateDelete { get; set; } /// <summary> /// Удалено? /// </summary> [Write(false)] public bool IsDelete => DeleteUserID != null; /// <summary> /// Получить Все(если передать true то только активные) /// </summary> /// <param name="isActivity"></param> /// <returns></returns> public static List<TypeTour> Get(bool isActivity = false) { using (var connection = DBModule.NewSqlConnection()) { return isActivity ? connection.Query<TypeTour>("SELECT * FROM TypeTours WHERE DeleteUserID IS NULL AND IsActivity = @isActivity ORDER BY Name", new { isActivity }).ToList() : connection.Query<TypeTour>("SELECT * FROM TypeTours WHERE DeleteUserID IS NULL ORDER BY Name").ToList(); } } /// <summary> /// Получить по ID /// </summary> /// <param name="id"></param> /// <returns></returns> public static TypeTour GetById(int id) { using (var connection = DBModule.NewSqlConnection()) { return connection.QueryFirstOrDefault<TypeTour>("SELECT * FROM TypeTours WHERE ID = @id", new { id }); } } /// <summary> /// Создать /// </summary> /// <returns></returns> public TypeTour Create() { using (var connection = DBModule.NewSqlConnection()) { DateAdd = DateTime.Now; CreateUserID = Guid.Parse(new AuthorizationModule().getUserKod()); ID = (int)connection.Insert(this); return this; } } /// <summary> /// Обновить /// </summary> /// <returns></returns> public TypeTour Update() { using (var connection = DBModule.NewSqlConnection()) { connection.Update(this); return this; } } /// <summary> /// Удалить /// </summary> /// <param name="id"></param> /// <returns></returns> public static bool Delete(int id) { var typeTour = GetById(id); typeTour.DateDelete = DateTime.Now; typeTour.DeleteUserID = Guid.Parse(new AuthorizationModule().getUserKod()); typeTour = typeTour.Update(); return typeTour.DateDelete != null; } } } ``` ### База данных 1. имя таблицы как имя класса только во множественном числе 2. имена у всех полей(Pascal casing) как у класса 3. тип поля должен соответствовать полю класса