За последний год я создал свои собственные соглашения о кодировании для C #. Мне также всегда удается убедить моих коллег следовать моим правилам кодирования, если у них их еще нет. Я очень увлекаюсь соблюдением правил кодирования; если я вижу, как кто-то изменяет один из моих файлов и не следует моим правилам, у меня могут возникнуть проблемы со сном ночью (хорошо, не так много, но …).
С помощью замечательного дополнения Visual Studio ReSharper легко форматировать код с помощью правил. Вам нужно всего лишь нажать Ctrl-E / Ctrl-C, чтобы отформатировать документ. ReSharper — обязательный инструмент для Visual Studio.
В течение последних двух лет, с момента выпуска платформы Windows Phone, я использовал язык XAML для программирования своих пользовательских интерфейсов. Найти соглашения по кодированию для C # довольно легко, но для XAML это было немного сложнее. Моим первым шагом было проверить стандартные проекты Microsoft, но я пришел к выводу, что даже они немного беспорядочные даже на сегодняшний день.
Вот пример проекта приложения WIndows Store Grid:
<ListView.GroupStyle> <GroupStyle> <GroupStyle.HeaderTemplate> <DataTemplate> <Grid Margin="7,7,0,0"> <Button AutomationProperties.Name="Group Title" Click="Header_Click" Style="{StaticResource TextPrimaryButtonStyle}"> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Title}" Margin="3,-7,10,10" Style="{StaticResource GroupHeaderTextStyle}" /> <TextBlock Text="{StaticResource ChevronGlyph}" FontFamily="Segoe UI Symbol" Margin="0,-7,0,10" Style="{StaticResource GroupHeaderTextStyle}"/> </StackPanel> </Button> </Grid> </DataTemplate> </GroupStyle.HeaderTemplate> </GroupStyle> </ListView.GroupStyle>
Во-первых, нет никаких пустых строк, а во-вторых, кнопка имеет атрибуты на отдельных строках, но для элементов TextBlock атрибуты находятся на тех же строках без какого-либо порядка.
Со временем я разработал свое собственное соглашение о кодировании XAML, которым я хотел бы поделиться. Одна из причин, по которой я разработал свое собственное соглашение о кодировании XAML, заключается в том, что я не люблю использовать окно «Свойства», потому что сложно получить обзор свойств, которые не установлены по умолчанию.
Мое соглашение о кодировании возобновляется в 5 баллов:
1- Поместите пустые строки между элементами.
Не бойтесь ставить пустые строки. Это делает чтение кода проще.
<Grid Height="250" VerticalAlignment="Top"> <Image Source="{Binding FeatureArticle1.Thumbnail}" Style="{StaticResource ImageThumbnailStyle}" /> <StackPanel Style="{StaticResource StackPanelSummaryStyle}"> <TextBlock FontSize="22" Style="{StaticResource TextBlockAuthorStyle}" Text="{Binding FeatureArticle1.Author}" /> <TextBlock FontSize="26" Height="70" Style="{StaticResource TextBlockSummaryStyle}" Text="{Binding FeatureArticle1.Title}" /> </StackPanel> </Grid>
Моими исключениями являются Grid.ColumnDefinition и Grid.RowDefinitions, потому что они имеют только один атрибут строки.
<Grid.ColumnDefinitions> <ColumnDefinition Width="200" /> <ColumnDefinition Width="200" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="200" /> <RowDefinition Height="140" /> </Grid.RowDefinitions>
2- Поместите один атрибут в строку.
<TextBlock FontWeight="Bold" Foreground="White" HorizontalAlignment="Right" Margin="0,0,12,0" Text="{Binding ArticlesCountText}" TextWrapping="Wrap" />
3- Упорядочить атрибуты в алфавитном порядке.
<Image Source="/Assets/Shares/NeutralImage.png" Height="125" HorizontalAlignment="Center" Width="125" Stretch="UniformToFill" VerticalAlignment="Center" />
Некоторые утверждают, что Высота и Ширина должны быть рядом или на соседней строке, но я все же предпочитаю алфавитный порядок, потому что намного легче читать, когда вы знаете, в каком порядке находятся ваши определения. Кроме того, если есть элемент со многими атрибутами намного проще проверить, отсутствует ли атрибут.
4- Поместите прикрепленные свойства в начале и в алфавитном порядке.
<Button Grid.Column="1" Grid.Row="2" Command="{Binding ShowWriterCommand}" CommandParameter="{Binding WriterAshley}" Style="{StaticResource HubTileButtonStyle}" />
Grid.Column / Grid.Row являются классическими примерами.
5- Определение стилей может быть менее строгим.
Когда я создаю стили с помощью Expression Blend, я склонен оставлять их как есть, когда они большие. Это больше о экономии времени, чем что-либо еще. Однако, когда стиль небольшой, я не помещаю пустые строки и помещаю свойства в алфавитном порядке следующим образом:
<Style x:Key="GridFeatureStyle" TargetType="Grid"> <Setter Property="Height" Value="194" /> <Setter Property="VerticalAlignment" Value="Top" /> <Setter Property="Width" Value="194" /> </Style>
Вывод
Возможно, это не идеальное решение для вас, но если у вас его нет, мое соглашение будет хорошим началом, особенно если вы делитесь кодом с коллегами.
Мой девиз о соглашении о кодировании следующий: лучше иметь соглашение о кодировании, чем не иметь его!
Удачного кодирования!