Я знаю, что существует множество вопросов о том, когда использовать или не использовать статические поля и методы в объектно-ориентированном программировании, но большинство примеров сводится к использованию Math.Pi или подобных упрощенных примеров.Эффективное использование статических полей и методов в классе? Инициализируется в конструкторе или в декларации? Мне нужно руководство
У меня серьезный недостаток в качестве программиста, и это связано с тем, что моя инвалидность соответствует программированию ООП в целом, я думаю. Если бы это зависело от меня, я бы использовал функциональный подход ко многим из моих программ, но мои коллеги-программисты не всегда согласны.
Я понимаю, что не все проблемы лучше всего решаются в контексте ООП, но я постараюсь представить проблему, с которой я сталкиваюсь сейчас, и я считаю, что ее лучше всего решить с помощью методов ООП.
Моя основная проблема заключается в том, что я не понимаю, как наилучшим образом использовать системные ресурсы при использовании ООП в C#. Я не могу визуализировать распределение памяти и поток выполнения при введении статических полей и методов в мои классы и когда объявлять ресурс как статический или нестатический.
Итак, это краткое объяснение моей проблемы под рукой:
мне нужно разработать «программу», которая синхронизирует информацию между двумя отключенными системами. «Система 1» работает с «Билетами», содержащими информацию об ошибках, сообщенных клиентами и проверенных тестировщиками. Я могу получить доступ к содержимому Билета в виде объектов через запрос Linq в базу данных SQL через .NET Framework Entity Framework.
«Система 2» работает с рабочими элементами, которые необходимо создать на основе билета «Система 1». «Утилита» должна синхронизировать эту информацию, и ее можно было бы изменить с обеих систем. Поэтому мне нужно сохранить информацию о состоянии разных объектов, которые сохраняются между прогонами программы.
Таким образом, я использую базу данных «System 1» (только для чтения) для создания локальных объектов, которые соответствуют требованиям «Системы 2» для создания начальных рабочих элементов и хранения локальных объектов посредством двоичной сериализации, поэтому я могу создать новый список в следующем запуске и сравнить значения локально и избежать ненужной загрузки сети и сервера, а затем обновить системы через их соответствующие API.
Хотя у меня есть рабочее решение для этого, я не уверен, что он работает эффективно. У меня есть класс (LocalTicket) и класс (LocalWorkItem), который используется для хранения состояния между запусками, но класс LocalTicket использует соединение с базой данных для сбора информации о билетах, и я объявил статический список для хранения значений из сервер для сравнения с локальными объектами. Я не инициализирую список перед вводом конструктора для первого объекта LocalTicket, и я делаю это через запрос LINQ to Object.
Будет ли это причиной того, что мой запрос LINQ будет выполняться каждый раз, когда создается LocalTicket или только один раз? Могу ли я лучше инициализировать список из запроса LINQ статическим методом в классе или нестационарным методом заполнить список с объектами и потребовать, чтобы вызывающие методы в моем классе утилиты создавали новый объект можно сравнить объекты? Или путем его инициализации при определении его? Получаемые LocalTickets, созданные из содержимого запроса, используются локально и создаются заново с каждым прогоном, чтобы обнаружить фактические изменения, внесенные в базу данных через приложение Help Desk.
Прошу прощения, если это похоже на кучу мусора, но я не знаю, как описать его более объяснительным образом ...
Наверное, мне нужно руководствоваться проектами классов, содержащих вызовы внешних источников, которые генерируют объекты, например, фабричные вещи или что-то в этом роде.
При чтении этого в контексте, я удивлен, если кто-то на самом деле быть в состоянии дать мне совет, но я рискну ...
Оформить заказ этой замечательной статьи от Jon Skeet на статической инициализации C#: http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-initialization-changes-in-net-4-0.aspx –
Спасибо! Я прочитаю его внимательно. Я также читаю последнюю версию «C# In Depth» Скита (как электронную книгу MEAP, поскольку она еще не опубликована), и этот парень действительно знает свой C#! – 2013-03-26 23:05:05