Your approach should work (at least in TikZ) but you must use the macro names with a leading backslash \
\newcommand{\Length}{8}
\newcommand{\Width}{4}
\coordinate (left_minus) at (-\Length/2,-\Width/2) ;
\coordinate (left_plus) at (-\Length/2,\Width/2) ;
The shorter way I use usually is a \def inside of a {tikzpicture}. In this case the “lengthen” are simple macros in the sense of TeX and can be pares by TikZ as if you type them directly, i.e. (0,0.5*\h) would be the same as (0,0.5*2) but also (0,0.5\h) would be read as (0,0.25) so don’t omit the * sign. I use this way since it depends on the current setting of the basis vectors of TikZ. The drawback of \def is that it overwirtes existing macros but if you use it inside of {tikzpicture} the (re)definition is kept local and should be no problem. If you want to use the varaibales globally you may use \newcommand and longer variable names instead.

The longer way uses really TeX lengthen, which can be used everywhere you need a length, e.g. in \hspace. But in this case you must add a unit and the lengthen won’t change when the basis vectors change.

Example:
\documentclass{article}
\usepackage{parskip}
\usepackage{tikz}
\begin{document}
\section{short way}
\begin{tikzpicture}
\def\l{5}
\def\h{2}
\draw (0,0) rectangle (0.5*\l,\h/2);
\end{tikzpicture}
\begin{tikzpicture}[x=2cm,y=2cm]
\def\l{5}
\def\h{2}
\draw (0,0) rectangle (0.5*\l,\h/2);
\end{tikzpicture}
\section{longer way}
\newlength{\mylength}
\setlength{\mylength}{5cm}
\newlength{\myheight}
\setlength{\myheight}{2cm}
\begin{tikzpicture}
\draw (0,0) rectangle (0.5\mylength,\myheight/2);
\end{tikzpicture}
\begin{tikzpicture}[x=2cm,y=2cm]
\draw (0,0) rectangle (0.5\mylength,\myheight/2);
\end{tikzpicture}
\end{document}