motkot
@motkot
Программирование C#.

Как можно улучшить этот код(ревью)?

Вот код, что-то типо сборки пк. Сейчас таких скрипта 2, они похожи, но мне кажется это плохо. Как это можно улучшить?
Можно ли как то избавиться от тегов?

Код материнской платы
using UnityEngine;

public class MotherBoardPlace : MonoBehaviour
{

    Collision collision;

    private void OnCollisionEnter(Collision collision)
    {
        this.collision = collision;
        switch(collision.collider.tag)
        {
            case "Processor":
                Place("ProcessorPlace", Vector3.zero);
                break;
            case "ram":
                Place("RamPlace", new Vector3(0, 0, 90));
                break;
            case "CpuFan":
                Place("CpuFanPlace", new Vector3(0, 0, 90));
                break;
        }
    }

    private void Place(string PlaceName, Vector3 Angle)
    {
        collision.rigidbody.isKinematic = true;
        collision.rigidbody.detectCollisions = false;
        collision.rigidbody.useGravity = false;
        collision.transform.parent = transform.Find(PlaceName);
        collision.transform.localPosition = Vector3.zero;
        collision.transform.localEulerAngles = Vector3.zero + Angle;
        if (!Grabbing.GrabObj.collider.CompareTag("Motherboard"))
        {
            Grabbing.grab = false;
        }

    }
}


Код корпуса компа
using UnityEngine;

public class Place : MonoBehaviour
{
    Collision collision;
    private void OnCollisionEnter(Collision collision)
    {
        this.collision = collision;
        switch(collision.collider.tag)
        {
            case "Motherboard":
                place("MotherboardPlace", Vector3.zero);
                break;

            case "Power":
                place("PowerPlace", Vector3.zero);
                break;
            case "Hdd":
                place("HddPlace", Vector3.zero);
                break;
            case "Ssd":
                place("SsdPlace", Vector3.zero);
                break;
            case "PcDoor":
                place("PcDoorPlace", Vector3.zero);
                break;
        }
    }

    private void place(string PlaceName, Vector3 Angle)
    {
        collision.rigidbody.isKinematic = true;
        collision.rigidbody.detectCollisions = false;
        collision.rigidbody.useGravity = false;
        collision.transform.parent = transform.Find(PlaceName);
        collision.transform.localPosition = Vector3.zero;
        collision.transform.localEulerAngles = Vector3.zero + Angle;
    }
}
  • Вопрос задан
  • 447 просмотров
Решения вопроса 3
GavriKos
@GavriKos Куратор тега Unity
- не используйте Find и прочее
- нет констант - переименование тегов влечет редактирование кода
- именование и кодстайл так себе (метод place в классе Place)
- с архитекторуй да, так себе
Ответ написан
profesor08
@profesor08
Строчки в коде замени на enum
https://docs.microsoft.com/en-us/dotnet/csharp/lan...

Именование путает, непонятное.

Плохая архитектура привела к дублированию кода. Тебе надо взять объект и расположить в другом объекте, это можно вынести в отдельный код, который будет заниматься расположением одного объекта внутри другого. Сами объект должны предоставлять всю необходимую информацию, возможно их можно сделать инстансом одного класса, который характеризовал некий объект с именем и внутренними слотами, если они есть. Таким образом можно будет организовать любую вложенность и компоновку.
Ответ написан
Jeer
@Jeer
уверенный пользователь
Привет,
Насчёт архитектуры сложно, посмотрите паттерны, рекомендую сайт https://refactoring.guru/ru.
Дублированного кода не должно быть. Вынести можно несколькими способами, после ознакомления с паттернами, подберёте наиболее вам подходящий.
Магические текстовки - плохая практика. Замените хотя бы на константы, но лучше работайте с энумами.
Насчёт code style так же верно заметили. У вас один метод именуется с большой буквы, в другом классе метод с маленькой буквы - это бросается в глаза и оставляет отпечаток, что сделано "тяп-ляп", лабораторная работа номер два.
Есть спецификации языка, в которых описывается, как правильно внедрять новые фишки. На основе этого (или через боль поиска багов) внутри компаний формируются свои code style документы. Могу скинуть вам на почту свой документ, это очень полезная вещь
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы