One purpose of organizing an environment in that way is to allow flexibility in the input.
You don't need to define the commands inside the environment; a frequently used strategy is the following:
\newcommand{\cvdate}[1]{\renewcommand{\givencvdate}{#1}}
\newcommand{\cvcompany}[1]{\renewcommand{\givencvcompany}{#1}}
\newcommand{\cvposition}[1]{\renewcommand{\givencvposition}{#1}}
\newcommand{\cvcomment}[1]{\renewcommand{\givencvcomment}{#1}}
\newcommand{\givencvdate}{REQUIRED!}
\newcommand{\givencvcompany}{REQUIRED!}
\newcommand{\givencvposition}{REQUIRED!}
\newcommand{\givencvcomment}{} % this is optional
\newenvironment{cvsection}
{\begin{flushleft}}
{\textbf{\givencvdate}\\
\givencvcompany\\
\givencvposition
\ifx\empty\givencvcomment\else\\[.5ex] \textit{\givencvcomment}\fi
\end{flushleft}}
In this way the order one specifies the data in the environment is irrelevant. Let's see a couple of examples
\begin{cvsection}
\cvdate{xx-xx-xxxx}
\cvcompany{Some company \& Co.}
\cvposition{Toilet cleaner}
\cvcomment{I love cleanin' dem toilets!}
\end{cvsection}
\begin{cvsection}
\cvposition{Toilet cleaner}
\cvdate{xx-xx-xxxx}
\cvcompany{Another company \& Co.}
\end{cvsection}
Of course you have to adjust the definition of cvsection
to suit your needs.
