Форма для создания новых учеников или посмотреть существующие студенческие информацию


Я начал с самыми лучшими намерениями, но эта форма у "Сокс" очень быстро.

Его цель-служить создание новой студенческой форме. Также, если вы хотите просмотреть существующий студентов информацию.

Думайте о нем, как Крю КРУДА.

Вот это:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Tutomentor.Branding;
using Tutomentor.Data.Repositories;

namespace Tutomentor.UI.Students
{
    public partial class StudentInformation : Form
    {
        StudentRepository repo = new StudentRepository();
        bool IsCreating = false;
        Student student;

        public StudentInformation()
        {
            InitializeComponent();
            LoadComboBoxes();
            LoadBranding();
            IsCreating = true;
        }

        public StudentInformation(int studentID)
        {
            InitializeComponent();
            LoadComboBoxes();
            LoadBranding();

            student = repo.FindStudent(studentID);
            LoadStudentInformation(student);

        }

        private void LoadComboBoxes()
        {
            cmbGrade.DisplayMember = "Name";
            cmbGrade.ValueMember = "ID";
            cmbGradeParalelo.DisplayMember = "Name";
            cmbGradeParalelo.ValueMember = "ID";
            GradeRepository repo = new GradeRepository();
            cmbGrade.DataSource = repo.FindAllGrades();
        }      

        private void LoadStudentInformation(Student student)
        {
            cmbGrade.SelectedValue = student.GradeParalelo.Grade.ID;
            cmbGradeParalelo.SelectedValue = student.IDGrade;
            txtRude.Text = student.RUDE.ToString();
            txtNombrePadre.Text = student.FatherName;
            txtProfesionPadre.Text = student.FatherProfession;
            txtCelularPadre.Text = student.MobilePhoneFather;
            txtLugarDeTrabajoPadre.Text = student.PlaceofWorkFather;

            txtNombreMadre.Text = student.MotherName;
            txtProfesionMadre.Text = student.MotherProfession;
            txtCelularMadre.Text = student.MobilePhoneMother;
            txtLugarDeTrabajoMadre.Text = student.PlaceofWorkMother;

            txtObservaciones.Text = student.Observations;

            txtNombre.Text = student.Name;
            txtApellidoPaterno.Text = student.FatherLastName;
            txtApellidoMaterno.Text = student.MotherLasteName;
            dtpFechaNacimiento.Value = Convert.ToDateTime(student.DateOfBirth);
            txtLugarNacimiento.Text = student.PlaceOfBirth;
            SetSex(student.Sex);
            txtCarnet.Text = student.Carnet;
            txtTelefono.Text = student.Telephone;
            txtCelular.Text = student.MobilePhone;
            txtDireccion.Text = student.Address;
        }

        private void SetSex(string p)
        {
            if (p == "M")
            {
                sexoMasculino.Checked = true;
                sexoFemenino.Checked = false;
            }
            else
            {
                sexoMasculino.Checked = false;
                sexoFemenino.Checked = true;
            }
        }

        private void LoadBranding()
        {
            this.Text = "Tutomentor - Agregando nuevo alumnos.";
            this.BackColor = Brand.PrimaryColor;
            panelBorderLeft.BackColor = Brand.HeaderColor;
            panelBorderRight.BackColor = Brand.HeaderColor;
            panelSeparator1.BackColor = Brand.SeparatorColor;
        }

        private void cmbGrade_SelectedIndexChanged(object sender, EventArgs e)
        {
            LoadGradeParalelos();
        }

        private void LoadGradeParalelos()
        {
            GradeParaleloRepository repo = new GradeParaleloRepository();
            Int64 gradeID = Convert.ToInt64(cmbGrade.SelectedValue);
            cmbGradeParalelo.DataSource = repo.FindAllGradeParalelos().Where(g => g.IDGrade == gradeID);
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            SaveInformation();
        }

        private void SaveInformation()
        {
            if (IsCreating)
            {
                Student newStudent = new Student();
                Int64 gradeId = Convert.ToInt64(cmbGradeParalelo.SelectedValue);
                newStudent.IDGrade = gradeId;
                newStudent.RUDE = Convert.ToInt64(txtRude.Text);

                /*Parents information.*/
                newStudent.FatherName = txtNombrePadre.Text;
                newStudent.FatherProfession = txtProfesionPadre.Text;
                newStudent.MobilePhoneFather = FormatPhoneNumber(txtCelularPadre.Text);
                newStudent.PlaceofWorkFather = txtLugarDeTrabajoPadre.Text;

                newStudent.MotherName = txtNombreMadre.Text;
                newStudent.MotherProfession = txtProfesionMadre.Text;
                newStudent.MobilePhoneMother = FormatPhoneNumber(txtCelularMadre.Text);
                newStudent.PlaceofWorkMother = txtLugarDeTrabajoMadre.Text;

                /*newStudent information*/
                newStudent.Name = txtNombre.Text;
                newStudent.FatherLastName = txtApellidoPaterno.Text;
                newStudent.MotherLasteName = txtApellidoMaterno.Text;
                newStudent.DateOfBirth = dtpFechaNacimiento.Value.ToShortDateString();
                newStudent.PlaceOfBirth = txtLugarNacimiento.Text;
                newStudent.Sex = sexoMasculino.Checked ? sexoMasculino.Text : sexoFemenino.Text;
                newStudent.Telephone = FormatPhoneNumber(txtTelefono.Text);
                newStudent.MobilePhone = FormatPhoneNumber(txtCelular.Text);
                newStudent.Address = txtDireccion.Text;
                newStudent.Carnet = FormatPhoneNumber(txtCarnet.Text);
                newStudent.Observations = txtObservaciones.Text;

                repo.Add(newStudent);
                repo.Save();
                MessageBox.Show("Se guardo el registro exitosamente.",
                    "Exito!",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information,
                    MessageBoxDefaultButton.Button1);
                ClearForm();
            }
            else
            {
                Int64 gradeId = Convert.ToInt64(cmbGradeParalelo.SelectedValue);
                student.IDGrade = gradeId;
                student.RUDE = Convert.ToInt64(txtRude.Text);

                /*Parents information.*/
                student.FatherName = txtNombrePadre.Text;
                student.FatherProfession = txtProfesionPadre.Text;
                student.MobilePhoneFather = FormatPhoneNumber(txtCelularPadre.Text);
                student.PlaceofWorkFather = txtLugarDeTrabajoPadre.Text;

                student.MotherName = txtNombreMadre.Text;
                student.MotherProfession = txtProfesionMadre.Text;
                student.MobilePhoneMother = FormatPhoneNumber(txtCelularMadre.Text);
                student.PlaceofWorkMother = txtLugarDeTrabajoMadre.Text;

                /*student information*/
                student.Name = txtNombre.Text;
                student.FatherLastName = txtApellidoPaterno.Text;
                student.MotherLasteName = txtApellidoMaterno.Text;
                student.DateOfBirth = dtpFechaNacimiento.Value.ToShortDateString();
                student.PlaceOfBirth = txtLugarNacimiento.Text;
                student.Sex = sexoMasculino.Checked ? sexoMasculino.Text : sexoFemenino.Text;
                student.Telephone = FormatPhoneNumber(txtTelefono.Text);
                student.MobilePhone = FormatPhoneNumber(txtCelular.Text);
                student.Address = txtDireccion.Text;
                student.Carnet = FormatPhoneNumber(txtCarnet.Text);
                student.Observations = txtObservaciones.Text;

                repo.Save();
                MessageBox.Show("Se guardo el registro exitosamente.",
                    "Exito!",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information,
                    MessageBoxDefaultButton.Button1);                
                this.Close();
            }

        }

        private string FormatPhoneNumber(string p)
        {
            return p.Insert(3, "-");
        }

        private void btnClear_Click(object sender, EventArgs e)
        {
            ClearForm();
        }

        private void ClearForm()
        {
            Action<Control.ControlCollection> func = null;

            func = (controls) =>
            {
                foreach (Control control in controls)
                    if (control is TextBox)
                        (control as TextBox).Clear();
                    else
                        func(control.Controls);
            };

            func(Controls);
        }
    }
}

Я не знаю, как улучшить этот класс, потому что нужно каждую строчку кода.



1412
13
задан 28 января 2011 в 01:01 Источник Поделиться
Комментарии
5 ответов

Можно упростить SaveInformation:

private void SaveInformation()
{
if (IsCreating)
{
Student newStudent = new Student();
repo.Add(newStudent);
}

Int64 gradeId = Convert.ToInt64(cmbGradeParalelo.SelectedValue);
newStudent.IDGrade = gradeId;
newStudent.RUDE = Convert.ToInt64(txtRude.Text);

/*Parents information.*/
newStudent.FatherName = txtNombrePadre.Text;
newStudent.FatherProfession = txtProfesionPadre.Text;
newStudent.MobilePhoneFather = FormatPhoneNumber(txtCelularPadre.Text);
newStudent.PlaceofWorkFather = txtLugarDeTrabajoPadre.Text;

newStudent.MotherName = txtNombreMadre.Text;
newStudent.MotherProfession = txtProfesionMadre.Text;
newStudent.MobilePhoneMother = FormatPhoneNumber(txtCelularMadre.Text);
newStudent.PlaceofWorkMother = txtLugarDeTrabajoMadre.Text;

/*newStudent information*/
newStudent.Name = txtNombre.Text;
newStudent.FatherLastName = txtApellidoPaterno.Text;
newStudent.MotherLasteName = txtApellidoMaterno.Text;
newStudent.DateOfBirth = dtpFechaNacimiento.Value.ToShortDateString();
newStudent.PlaceOfBirth = txtLugarNacimiento.Text;
newStudent.Sex = sexoMasculino.Checked ? sexoMasculino.Text : sexoFemenino.Text;
newStudent.Telephone = FormatPhoneNumber(txtTelefono.Text);
newStudent.MobilePhone = FormatPhoneNumber(txtCelular.Text);
newStudent.Address = txtDireccion.Text;
newStudent.Carnet = FormatPhoneNumber(txtCarnet.Text);
newStudent.Observations = txtObservaciones.Text;

repo.Save();
MessageBox.Show("Se guardo el registro exitosamente.",
"Exito!",
MessageBoxButtons.OK,
MessageBoxIcon.Information,
MessageBoxDefaultButton.Button1);

if (IsCreating)
{
ClearForm();
}
else
{
this.Close();
}
}

Вторая вещь стиль. Некоторые люди, как это другие ненавидят его.

    private void SetSex(string p)
{
sexoMasculino.Checked = (p == "M");
sexoFemenino.Checked = !sexoMasculino.Checked;
}

Дополнительное Примечание: непонятно из данного текста, если P будет уже санированы. В результате (в зависимости от срока полезного использования) необходимо также проверить на "М" (если это возможно).

10
ответ дан 28 января 2011 в 01:01 Источник Поделиться

Извините, я не могу прокомментировать кто-нибудь ответить из-за моих очков. Но я бы рефакторинг SetSex Мартин-Йорк() метод должен выглядеть следующим образом:

private void SetSex(string p)
{
sexoMasculino.Checked = p.Equals("m", StringComparison.OrdinalIgnoreCase);
sexoFemenino.Checked = !sexoMasculino.Checked;
}

6
ответ дан 28 января 2011 в 03:01 Источник Поделиться

Посмотрите на ваш код внутри этого блока внутри SaveInformation способ.

if (IsCreating) 
{
// code here
}
else
{
// and here
}

Начать рефакторинг с этим. Сколько строк кода на самом деле другое? За пределами другого объекта наименование (newStudent и студента), там не очень много. Мне кажется, что можно создать метод с учеником объект в качестве параметра, так что вы можете заполнить все соответствующие атрибуты.

4
ответ дан 28 января 2011 в 01:01 Источник Поделиться

public StudentInformation()
{
InitializeComponent();
LoadComboBoxes();
LoadBranding();
IsCreating = true;
}

public StudentInformation(int studentID)
{
InitializeComponent();
LoadComboBoxes();
LoadBranding();

student = repo.FindStudent(studentID);
LoadStudentInformation(student);

}

может быть рефакторингу,

// default IsCreating to true
bool IsCreating = true;

public StudentInformation()
{
InitializeComponent();
LoadComboBoxes();
LoadBranding();
}

public StudentInformation(int studentID) : this()
{
IsCreating = false;
student = repo.FindStudent(studentID);
LoadStudentInformation(student);
}

Также есть много кода в класс формы контроля, которые должны быть частью контроллер (MVC) / ведущий (МВП), как с помощью этих хранилищ также сохранить информацию следует с регулятором частью уведомить модель, чтобы сохранить данные.

3
ответ дан 28 января 2011 в 10:01 Источник Поделиться

Можно также утверждать, что вы смешиваете большое презентация код с бизнес-логикой (создания/модификации данных). Не делай этого. Отдельного представления от содержания.

Имеют форму вызова с ViewModel/стиль контроллер объекта, который обрабатывает сохранение информации об учащихся и содержит репозиторий. Затем код формы можете сосредоточиться исключительно на презентационных элементов, и других объектов может обрабатывать проверка, модификация и т. д. Разделение хорошее, юный падаван.

2
ответ дан 29 января 2011 в 01:01 Источник Поделиться